成员初始化
Memberwise 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;
}
};
其他成员已经给出了理论答案。
务实地说,在以下情况下使用成员初始化:
- 您的类中有一个引用属性(
MyClass & mMyClass
(。您需要进行成员初始化,否则,它不会编译 - 类(
const MyClass mMyClass
(中有一个常量属性。您还需要进行成员初始化,否则,它不会编译 - 您的类中有一个没有默认构造函数的属性(
MyClass mMyClass
没有构造函数MyClass::MyClass()
(。您还需要进行成员初始化,否则,它不会编译 - 您有一个非常大的属性对象(
MyClass mMyClass
和sizeof(MyClass) = 1000000000
(。使用成员式初始化,只需构建一次。通过在构造函数中直接初始化,它被构建了两次
第一个使用初始化,第二个不使用初始化,它使用assignment。在第二个实例中,首先默认初始化成员x
和y
(为零(,然后分别为它们分配a
和b
。
还要注意的是,在第二个例子中,只有当成员的类型具有非平凡默认构造函数时,才默认初始化成员。否则,就不会进行初始化(正如@James在评论中指出的那样(。
现在看看这个主题就知道了:
- 什么是C++中的非平凡构造函数
相关文章:
- 为什么在C++中首先初始化成员类
- 是否可以防止省略聚合初始化成员?
- 正在复制具有未初始化成员的结构
- 使用大括号或括号初始化成员变量
- C++结构:强制初始化成员?
- C++中未初始化成员布尔变量的默认值是多少?
- 使用默认值初始化成员引用
- 在构造函数中初始化成员时,是否应该在成员上使用 std::move?
- C++使用 { } 初始化成员变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 有没有办法在Brace中初始化成员
- 从现有 istream 或类本身创建的 istream 初始化成员 istream
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 通常应用方法,使用带有构造函数委托的 SFINAE 通过类模板的构造函数初始化成员
- 如何在嵌套类中初始化成员?C
- 是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
- 编译器错误,因为构造函数必须显式初始化成员
- 如何使用成员函数初始化成员函数指针
- C 如何使用隐藏的默认构造函数初始化成员