3种类型的初始化

T.J*_*.J. 3 c++ initialization value-initialization

可能重复:
C++中的以下短语是什么意思:零,默认和值初始化?

今天我开始了解C++中有3种类型的初始化:

  • 零初始化
  • 默认初始化
  • 价值初始化

我搜索了它,但我没有找到满意的结果.我得到的只是一些标准.到目前为止我所理解的是:在值初始化的情况下,数据成员在某些情况下可以获得等于零的值.

请用示例详细说明它们(标准).另外,请不要只提供标准中的文字.

谢谢

Ker*_* SB 6

初始化类型是指语言语法.这是两个例子:

T * p1 = new T;
T * p2 = new T();
Run Code Online (Sandbox Code Playgroud)

该对象*p1是默认初始化的,并且该对象*p2是值初始化的.

初始化的效果取决于类型T:1)如果T是基本的,则默认初始化不执行任何操作(即,对象保持未初始化),而值初始化在该情况下等于零初始化,并且意味着对象设置为零.

2)如果T是聚合(即没有构造函数或析构函数或赋值运算符的类),则每个元素都是递归默认值或值初始化的.

3)如果T是class-type并且具有用户定义的构造函数,则default-和value-initialization都会导致对默认构造函数的调用.

请注意,具有构造函数的类的成员对象可以依次进行默认值或值初始化:

struct Foo {
    int x;
    int y;
    Foo() : x() { }
};
Run Code Online (Sandbox Code Playgroud)

现在当你说Foo a;当时a是默认初始化的,所以调用默认构造函数.这反过来导致a.x值 - 即零初始化,同时a.y保持默认 - 即未初始化.

(注意,实际上不可能对自动对象进行值初始化,但在C++ 11中,可以使用大括号初始化来进行值初始化,如同Foo a{};.(这与Foo a;我们的示例中的行为完全相同,因此第三段.))