给定一个聚合结构/类,其中每个成员变量具有相同的数据类型:
struct MatrixStack {
Matrix4x4 translation { ... };
Matrix4x4 rotation { ... };
Matrix4x4 projection { ... };
} matrixStack;
将它强制转换为其成员数组的效果如何? e.g。
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());
我这样做是因为在大多数情况下我需要命名成员访问以获得清晰度,而在其他一些情况下我需要将一个数组传递给其他API。通过使用reinterpret_cast,我可以避免分配。
答案 0 :(得分:3)
演员不需要按标准工作。
但是,您可以使用静态断言来保护代码的安全,如果违反了这些假设,则会阻止它编译:
static_assert(sizeof(MatrixStack) == sizeof(Matrix4x4[3]), "Size mismatch.");
static_assert(alignof(MatrixStack) == alignof(Matrix4x4[3]), "Alignment mismatch.");
// ...
const Matrix4x4* ptr = &matrixStack.translation;
// or
auto &array = reinterpret_cast<const Matrix4x4(&)[3]>(matrixStack.translation);