可能重复:
C++ initialization lists
成员初始化和类中的直接初始化有什么区别? 这个类中定义的两个构造函数有什么区别?
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;
}
};
答案 0 :(得分:5)
其他成员已经给出了理论答案。
实际上,在这些情况下使用成员初始化:
MyClass & mMyClass
)。您需要进行成员初始化,否则,它不会编译。const MyClass mMyClass
)中有常量属性。您还需要进行成员初始化,否则,它不会编译。MyClass mMyClass
没有构造函数MyClass::MyClass()
)的属性没有默认构造函数。您还需要进行成员初始化,否则,它不会编译。MyClass mMyClass
和sizeof(MyClass) = 1000000000
)。使用成员初始化,您只需构建一次。通过构造函数中的直接初始化,它可以构建两次。答案 1 :(得分:4)
第一个使用初始化,第二个不使用初始化,它使用赋值。在第二个中,成员x
和y
首先默认初始化(零),然后为其分配a
和{{ 1}}分别。
另请注意,在第二个成员中,只有当成员的类型具有非平凡的默认构造函数时,成员才会默认初始化。否则,没有初始化(如评论中注明的@James)。
现在请看这个主题: