可能重复:
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;
}
};
可能重复:
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;
}
};
其他成员已经给出了理论答案。
务实地,在这些情况下使用成员初始化:
MyClass & mMyClass
)。您需要按成员进行初始化,否则无法编译。const MyClass mMyClass
您还需要按成员进行初始化,否则无法编译。MyClass mMyClass
没有构造函数MyClass::MyClass()
)。您还需要按成员进行初始化,否则无法编译。MyClass mMyClass
和sizeof(MyClass) = 1000000000
)。通过按成员初始化,您只需构建一次。在构造函数中直接初始化,它被构建了两次。第一个使用初始化,第二个不使用初始化,它使用assignment。在第二个中,成员x
和y
首先默认初始化(为零),然后分别分配给它们a
和b
。
另请注意,在第二个中,仅当成员类型具有非平凡的默认构造函数时,才默认初始化成员。否则,没有初始化(正如@James 在评论中指出的那样)。
现在看这个话题就知道了: