and*_*ean 12 c++ strict-aliasing language-lawyer
根据标准- 聚合或联合类型,在其元素或非静态数据成员(包括递归地,子聚合或包含的联合的元素或非静态数据成员)中包括上述类型之一,这是允许的:
struct foo {
float x;
};
void bar(foo*);
float values[9];
bar(reinterpret_cast<foo*>(&values));
Run Code Online (Sandbox Code Playgroud)
但是,我不确定以下示例是否也遵循此规则:
struct foo {
float x;
float y;
float z;
};
void bar(foo*);
float values[9];
assert((sizeof(values) / sizeof(float)) % 3 == 0); // sanity check
bar(reinterpret_cast<foo*>(&values));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |