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 (...);