成员初始化

cpp*_*der 4 c++ member-initialization

可能重复:
C++初始化列表

成员初始化和类中的直接初始化有什么区别?这个类中定义的两个构造函数有什么区别?

class A
{
    public:
    int x;
    int y;
    A(int a, int b) : x(a), y(b)
    {}

    A(int a, int b)
    {
        x = a;
        y = b;
    }
};
Run Code Online (Sandbox Code Playgroud)

Fez*_*vez 6

其他成员给出了理论答案.

实际上,在这些情况下使用成员方式初始化:

  • 你的类中有一个引用属性(MyClass & mMyClass).您需要执行成员初始化,否则,它不会编译.
  • 你的class()中有一个常量属性const MyClass mMyClass.您还需要进行成员初始化,否则,它不会编译.
  • 您的类中没有默认构造函数属性(MyClass mMyClass没有构造函数MyClass::MyClass()).您还需要进行成员初始化,否则,它不会编译.
  • 你有一个非常大的属性对象(MyClass mMyClasssizeof(MyClass) = 1000000000).使用成员初始化,您只需构建一次.通过构造函数中的直接初始化,它构建了两次.


Naw*_*waz 5

第一个使用初始化,第二个不使用初始化,它使用赋值。在第二个中,成员xandy首先默认初始化(使用),然后分别分配给它们ab

还要注意的是,在第二个,成员是默认初始化只有当类型的成员都具有不平凡的默认构造函数。否则,没有初始化(如@James 在评论中指出的)。

现在看这个话题就知道: