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

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

Barbara Streisand
Barbara Streisand原创
2024-12-14 14:24:15384浏览

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

初始化列表与构造函数分配:内部和代码差异

在给定的 C 代码中,有一个关于使用成员初始值设定项列表并在构造函数中赋值。

成员初始值设定项List

成员初始值设定项列表,括在构造函数名称后面的括号中,用于初始化:

  • 常量成员
  • 引用(不是指针)
  • 基类成员(基类的参数构造函数)

构造函数赋值

构造函数赋值,另一方面,用于初始化非常量成员并将值分配给非引用变量。

内部差异

在内部,两种方法生成的代码略有不同。使用成员初始值设定项列表时,编译器在构造期间将成员值直接放入类对象中。这可以避免额外的赋值操作。

代码差异

比较给定的代码片段:

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

两个片段都会初始化三个具有指定值的私有成员 _capacity、_data 和 _len。但是,第一个代码段使用成员初始值设定项列表,而第二个代码段使用构造函数分配。

何时使用成员初始值设定项列表

必须使用初始化列表:

  • 初始化常量成员
  • 初始化引用
  • 将参数传递给基类构造函数

对于标准初始化(非常量成员、非引用),可以使用任一方法。一般来说,出于效率原因,成员初始值设定项列表是首选。

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

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