联合实例的默认初始化有什么影响?

时间:2015-07-21 15:50:06

标签: c++ c++11 initialization c++14

cpp reference之后,我会理解直到C ++ 11的行为是保持未初始化(如果union是POD类型,很可能),而它始终会调用默认构造函数C ++ 14

这句话是否正确?

编辑:我很困惑,因为在C ++ Primer(第5版,涵盖C ++ 11)中,人们可以读到“就像内置类型一样,默认情况下联合会未初始化”(p 848) ),但更进一步,有“......联合(成员)将被默认初始化,这意味着联盟的第一个成员将被初始化”(p 851)。

对我来说似乎是矛盾的,说默认情况下工会是未初始化的,然后说作为工会的数据成员的默认初始化会初始化工会的第一个成员。

1 个答案:

答案 0 :(得分:3)

对于任何类类型T,默认初始化类型为T的对象会尝试查找并运行默认构造函数。如果一个union包含任何具有非平凡构造函数的成员,那么如果你没有明确地定义一个,那么union的默认构造函数被定义为已删除(9.5 / 2),因此该程序是不正确的。