C++;带主体和不带主体的部分构造函数的行为不同 考虑下面的C++代码: #包括 #包括 #定义转储(u,str)do{\ std::cout

C++;带主体和不带主体的部分构造函数的行为不同 考虑下面的C++代码: #包括 #包括 #定义转储(u,str)do{\ std::cout,c++,constructor,language-lawyer,raii,C++,Constructor,Language Lawyer,Raii,与给定构造函数 A() : d(4) { ... } 除了d之外的所有数据成员都将默认初始化。对于内置类型,这是无操作的,并且这些数据成员将具有不确定的值。读取其值是未定义的行为 有些编译器在调试版本中使用特定的字节模式记录数据成员,以帮助捕获运行时错误。无法复制:我使用不同的编译器和命令行选项多次注释/取消注释,从未看到过所有的零。@Evg Hm,因此它看起来像是我当前使用的编译器(ICPC 19.0)只是碰巧表现得和cpp.sh运行的一样。我没有考虑到这种可能性,因此错误地认为这种行为是普

与给定构造函数

A() : d(4) { ... }
除了
d
之外的所有数据成员都将默认初始化。对于内置类型,这是无操作的,并且这些数据成员将具有不确定的值。读取其值是未定义的行为


有些编译器在调试版本中使用特定的字节模式记录数据成员,以帮助捕获运行时错误。

无法复制:我使用不同的编译器和命令行选项多次注释/取消注释,从未看到过所有的零。@Evg Hm,因此它看起来像是我当前使用的编译器(ICPC 19.0)只是碰巧表现得和cpp.sh运行的一样。我没有考虑到这种可能性,因此错误地认为这种行为是普遍的。