默认构造函数是否初始化内置类型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (79)

默认构造函数(由编译器创建)是否初始化内置类型?

提问于
用户回答回答于

对于技术上符合C++标准的实现,答案是,它取决于对象是否为POD,以及如何初始化对象。根据C++标准:

MyNonPodClass instance1;//built in members will not be initialized
MyPodClass instance2;//built in members will be not be initialized
MyPodClass* instance3 = new MyPodClass;//built in members will not be initialized
MyPodClass* instance3 = new MyPodClass() ;//built in members will be zero initialized

用户回答回答于

隐式定义(由编译器定义)类的默认构造函数不会初始化内置类型的成员。

例如,如果您的类没有用户声明的构造函数。

class C { 
  int x;
};

然后编译器将隐式提供一个。编译器提供的构造函数什么也不做,这意味着它不会初始化C::x

C c; // Compiler-provided default constructor is used
// Here `c.x` contains garbage
C c = C(); // Does not use default constructor for `C()` part
           // Uses value-initialization feature instead
assert(c.x == 0);

C *pc = new C(); // Does not use default constructor for `C()` part
                 // Uses value-initialization feature instead
assert(pc->x == 0);

在不涉及构造函数的情况下执行的另一个初始化示例是聚合初始化。

C c = {}; // Does not use any `C` constructors at all. Same as C c{}; in C++11.
assert(c.x == 0);

C d{}; // C++11 style aggregate initialization.
assert(d.x == 0);

扫码关注云+社区