【发布时间】:2019-04-02 03:45:21
【问题描述】:
标准defines 当两种类型布局兼容。但是,我在标准中的任何地方都看不到当两种类型布局兼容时会产生什么后果。似乎 layout-compatible 是一个没有在任何地方使用的定义。
layout-compatible的目的是什么?
注意:假设这可能意味着类型具有相同的布局(offsetof 对于每个相应的成员都是相同的),因此例如,对于普通可复制类型,可以在它们之间复制底层字节。但是我在标准中没有看到这样的东西。
【问题讨论】:
-
通用初始序列保证不算作使用这个定义吗?虽然是传递性的......
-
我唯一能找到的是 §12.2.21 定义通用初始序列和 §6.7.2.3 “指向布局兼容类型的指针应具有相同的值表示和对齐要求”(n4713)跨度>
-
@StoryTeller:如果他们有共同的初始序列,那么后果是什么?这些类型有什么属性可以利用吗?
-
stackoverflow.com/questions/21956354/… 来自那里的答案(高级代表用户)“AFAICT 标准实际上并没有说明布局兼容类型可以做什么和不能做什么。”也许......一个骗子......
-
@bolov:你说得对,该定义确实用于指向布局兼容类型的指针(也许这就是答案......)。但我期待布局兼容类型的一些更强大的属性。
标签: c++ struct language-lawyer c++17 memory-layout