Với một struct tổng hợp/lớp, trong đó mỗi biến thành viên là các kiểu dữ liệu giống nhau:Có hợp lệ để đúc con trỏ đến struct để con trỏ mảng
struct MatrixStack {
Matrix4x4 translation { ... };
Matrix4x4 rotation { ... };
Matrix4x4 projection { ... };
} matrixStack;
Làm thế nào hợp lệ là nó bỏ nó vào một mảng của các thành viên của nó? ví dụ.
const Matrix4x4 *ptr = reinterpret_cast<const Matrix4x4*>(&matrixStack);
assert(ptr == &matrixStack.translation);
assert(ptr + 1 == &matrixStack.rotation);
assert(ptr + 2 == &matrixStack.projection);
auto squashed = std::accumulate(ptr, ptr + 3, identity(), multiply());
Tôi đang làm điều này vì trong hầu hết các trường hợp, tôi cần đặt tên truy cập thành viên để rõ ràng, trong một số trường hợp khác, tôi cần chuyển mảng vào một số API khác. Bằng cách sử dụng reinterpret_cast, tôi có thể tránh phân bổ.
sự hiểu biết của tôi là sử dụng kết quả của một dàn diễn viên đó sẽ không biên dịch trừ nếu sử dụng reinterpret_cast là hầu như luôn luôn mạo hiểm hành vi không xác định. Trường hợp cụ thể này có khả năng hoạt động như dự định (trừ khi trình biên dịch của bạn làm rối loạn liên kết cấu trúc sao cho các thành viên Matrix4x4 không tiếp giáp hoàn toàn trong bộ nhớ), nhưng nó vẫn không được đảm bảo bởi tiêu chuẩn. – antred
Nó có thể hoạt động, có thể không, phụ thuộc vào kích thước thực tế của Matrix4x4 và cài đặt căn chỉnh dữ liệu –
Cấu trúc có thể có đệm trong khi [mảng không bao giờ có đệm] (https://stackoverflow.com/questions/1066681/can-c-arrays-contain- padding-in-between-elements). – sashoalm