首页 >后端开发 >C++ >成员初始化列表与构造函数分配:什么时候应该使用哪个?

成员初始化列表与构造函数分配:什么时候应该使用哪个?

DDD
DDD原创
2024-12-23 02:32:37572浏览

Member Initializer List vs. Constructor Assignments: When Should You Use Which?

初始化列表与构造函数赋值:内部差异

初始化类成员时,可以选择使用成员初始值设定项列表或分配值在构造函数体内。在内部,这些方法有细微的差别。

成员初始值设定项列表

使用成员初始值设定项列表,如本示例所示:

MyClass::MyClass(): _capacity(15), _data(NULL), _len(0)
{
}

在进入构造函数体之前直接初始化成员变量。这对于以下情况特别有用:

  • 初始化常量成员:这些成员必须在执行构造函数主体之前初始化,而成员初始值设定项列表是执行此操作的唯一方法。
  • 初始化引用:引用必须在构造函数主体之前初始化,并且成员初始值设定项列表是首选方法。
  • 将参数传递给基类构造函数:使用参数化构造函数从基类继承时,必须使用成员初始值设定项列表来初始化基类成员。

构造函数分配

另一方面,在构造函数体内赋值,如下例所示:

MyClass::MyClass()
{
  _capacity=15;
  _data=NULL;
  _len=0
}

在构造函数执行期间执行初始化。这种方法通常用于非常量成员和可以根据构造函数的参数初始化的成员。

生成代码的比较

通常,两种方法都会生成类似的结果代码。但是,对于常量成员或引用,只有成员初始值设定项列表可以初始化它们,因为构造函数赋值会导致编译错误。

以上是成员初始化列表与构造函数分配:什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn