【发布时间】:2014-10-25 07:41:59
【问题描述】:
我遇到了最初的序列概念。对initial sequence 短语的标准进行搜索仅给出 3 个结果,并且它们没有给出定义。
部分N3797::9.5/1 [class.union]:
如果标准布局联合包含多个标准布局结构 共享一个共同的初始序列(9.2),如果这个对象 标准布局联合类型包含标准布局之一 结构,允许检查任何的公共初始序列 标准布局结构成员;
我想看一个例子来证明那句话。
【问题讨论】:
-
是什么阻止你写一个例子?关键词“标准布局联合类型包含标准布局结构之一”
-
@Cheersandhth.-Alf 最初的顺序是什么?
-
我认为这是说只要数据成员属于同一类型,它们之间的填充将相同,并且成员将正确地相互别名。这意味着使用一个结构的标识符输入一个数字可以使用不同的结构标识符准确地取出(从同一位置)直到其中一个结构包含与另一个不同的类型(按声明顺序) . (这个解释比文档简单吗?)!
-
这里的关键短语是
common initial sequence,公共部分很重要,如果所有结构都以int kind;开头,那么这就是公共的初始序列。 -
@DmitryFucintv 根据我的理解,您的示例导致 no UB。但只要声明顺序的类型不同,这种保证就会终止。
标签: c++ struct language-lawyer unions