标准定义了两种类型何时是布局兼容的。但是,我没有在标准中看到两种类型是布局兼容时的后果。似乎布局兼容是一个没有被使用的定义。
布局兼容的目的是什么?
注:据说这可能意味着类型具有相同的布局(每个对应成员的offsetof
相同),因此例如对于可平凡复制的类型,可以在它们之间复制基础字节。但是我没有在标准中看到类似的内容。
标准定义了两种类型何时是布局兼容的。但是,我没有在标准中看到两种类型是布局兼容时的后果。似乎布局兼容是一个没有被使用的定义。
布局兼容的目的是什么?
注:据说这可能意味着类型具有相同的布局(每个对应成员的offsetof
相同),因此例如对于可平凡复制的类型,可以在它们之间复制基础字节。但是我没有在标准中看到类似的内容。
标准确实定义了一个特定情况,其中布局兼容性很重要:在union
中。如果两个成员具有布局兼容性,并且其中一个是活动的union
成员,则可以通过对任何布局兼容成员的指针/引用访问该对象。这是“通用初始序列”规则的结果。
offsetof
对应成员相同,布局必须相同)即使没有明确说明,也必须是正确的吗?我的意思是,如果布局不同,那么联合规则就无法满足。 - geza-fno-strict-aliasing
标志启用),该选项表示任何行为在没有类型访问规则的情况下定义的程序将以那种方式处理,即使这些规则会说该程序调用UB也是如此。T1
的指针转换为T2*
,则使用后者指针对结构的任何成员进行的任何操作都将访问T1
对象的相应成员。
reinterpret_cast
。如果我确定了,我就会发布一个答案。 :) - P.W