这是否违反严格的别名规则?

时间:2019-07-03 20:41:05

标签: c++ language-lawyer strict-aliasing

根据标准-集合或联合类型,在其元素或非静态数据成员(包括递归地,子集合或包含的联合的元素或非静态数据成员)中包括上述类型之一,这是允许的:

struct foo {
  float x;
};

void bar(foo*);

float values[9];
bar(reinterpret_cast<foo*>(&values));

但是,我不确定以下示例是否也遵循此规则:

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));

0 个答案:

没有答案