构造器(C )中私人成员初始化的差异
Difference in Private Member Initializations in Constructor (C++)
我已经离开了C 一段时间了,我试图确定已定义的类的私人成员变量的这两个默认构造函数初始化(如果有)之间的差异。当实现位于单独的文件中时,类定义在标题文件中。所有私人成员变量都需要初始化为" 0"或一个非含义的值。
注意:
int数据[max_size]是固定大小的编译时间数组。int二手:是数组的索引跟踪器。
一般来说,我习惯于以以下方式初始化成员:
// Default Constructor
IntSet::IntSet()
{
data[MAX_SIZE-1] = {0}
used = 0;
}
我正在梳理一些遗留代码,并找到完全不同的语法:
// Default Constructor
IntSet::IntSet() : used(0)
{
data[MAX_SIZE-1] = {0};
}
最终结果有区别吗?
成员在构造时将其初始化, 到达构造函数的主体。在某些情况下它们有所不同。例如:
-
如果成员是const或参考,则必须在初始化器列表中初始化,并且不能在构造函数正文中初始化
-
如果成员没有默认构造函数(或者您无法访问它),则必须提供构造函数,它应该使用一些参数,并且只能在初始化器列表中完成。
-
如果对象是"大而昂贵的",并且可以分配给对象,那么默认情况下,您可能会执行构建对象的效率低下,然后在其上使用分配运算符。(而不是同时用其初始值构造它。)
对于整数和原始的POD类型,如您所描述的默认结构是微不足道的,因此,无论哪种方式,鉴于上述参考,const等的限制,等等。
相关文章:
- 为什么在C++中首先初始化成员类
- 是否可以防止省略聚合初始化成员?
- 正在复制具有未初始化成员的结构
- 使用大括号或括号初始化成员变量
- C++结构:强制初始化成员?
- C++中未初始化成员布尔变量的默认值是多少?
- 使用默认值初始化成员引用
- 在构造函数中初始化成员时,是否应该在成员上使用 std::move?
- C++使用 { } 初始化成员变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 有没有办法在Brace中初始化成员
- 从现有 istream 或类本身创建的 istream 初始化成员 istream
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 通常应用方法,使用带有构造函数委托的 SFINAE 通过类模板的构造函数初始化成员
- 如何在嵌套类中初始化成员?C
- 是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
- 编译器错误,因为构造函数必须显式初始化成员
- 如何使用成员函数初始化成员函数指针
- C 如何使用隐藏的默认构造函数初始化成员