联盟的规则,例如[class.mem]
p20也允许std::aligned_union_t
?例如,如果我在pair<const A, B>
中存储两对(pair<A, B>
和std::aligned_union_t
),其中非const对始终处于活动状态。访问pair<const A>
类型是否违反严格别名规则?
该标准似乎在[class.mem]
p20暗示,即使非const对激活,也可以安全地访问该对的const成员
union U {
std::pair<A, B> pair;
std::pair<const A, const B> const_pair;
};
U u = {A{}, B{}};
cout << u.const_pair.first << endl;
cout << u.const_pair.second << endl;
但std::aligned_union
位置new
和reinterpret_cast
构建并获得正确的值是否同样安全?
(假设A
和B
是标准布局)
答案 0 :(得分:3)
当核心语言说&#34; union&#34;时,它意味着&#34; union&#34;,即&#34;用 class-key {定义的类{1}}&#34 ;.不是被称为union
的可怜的图书馆模仿。