构造器(C )中私人成员初始化的差异

Difference in Private Member Initializations in Constructor (C++)

本文关键字:初始化 成员 构造器      更新时间:2023-10-16

我已经离开了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等的限制,等等。