Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 何时在构造函数中初始化时构造成员对象';什么是初始化列表?_C++_Initializer List_Default Constructor - Fatal编程技术网

C++ 何时在构造函数中初始化时构造成员对象';什么是初始化列表?

C++ 何时在构造函数中初始化时构造成员对象';什么是初始化列表?,c++,initializer-list,default-constructor,C++,Initializer List,Default Constructor,如果成员对象数据没有出现在构造函数的初始化列表中,则数据由其默认构造函数构造 如果数据出现在构造函数的初始化列表中,则只需将其初始化为给定值。这是否意味着没有用于创建数据的构造函数调用?那么新对象数据是如何构造的?在构造函数的初始化列表中初始化数据时,将调用其参数化构造函数。 例如: #包括 #包括 类数据{ 公众: 数据(int firstArg,std::string mSecondArg) { 标准::cout 如果数据出现在构造函数的初始化列表中,则只需将其初始化为给定值 不,它是使用提

如果成员对象
数据
没有出现在构造函数的初始化列表中,则
数据
由其默认构造函数构造


如果
数据
出现在构造函数的初始化列表中,则只需将其初始化为给定值。这是否意味着没有用于创建
数据的构造函数调用
?那么新对象
数据
是如何构造的?

在构造函数的初始化列表中初始化
数据
时,将调用其参数化构造函数。
例如:

#包括
#包括
类数据{
公众:
数据(int firstArg,std::string mSecondArg)
{
标准::cout
如果数据出现在构造函数的初始化列表中,则只需将其初始化为给定值

不,它是使用提供的任何参数初始化的。如果它具有类类型,则将参数传递给合适的构造函数

这是否意味着没有用于创建数据的构造函数调用

否。如果它有类类型,则通过调用构造函数完成初始化

§12.6.2/7:mem初始值设定项中的表达式列表或带括号的初始列表用于根据8.5的初始化规则初始化指定的子对象(或者,如果是委托构造函数,则是完整的类对象),以进行直接初始化

换句话说,这意味着调用了普通构造函数

例如:

class Foo { Bar bar; Foo () : bar(...) { } };
类似于创建
Bar
对象:

Bar bar (...);
Bar bar (...);