考虑以下代码片段:
#include <iostream>
union U{
U(): i(1) {}
int i;
int j = 2; // this default member initializer is ignored by the compiler
};
U u;
int main(){
std::cout << u.i << '\n';
std::cout << u.j << '\n';
}
该代码输出 (请参见实时示例):
1
1
在标准文档中哪里提到了编译器会忽略成员U::j
的默认成员初始化器?
请注意,下面的联合体不能编译,根据[class.union.anon]/4,这是可以的。因此我希望上面的代码片段也无法编译。
请参见在线示例:
union U{
int i = 1;
int j = 2;
};
i
或j
,然后将使用默认成员初始化器。 - 463035818_is_not_a_number