C++ 类内成员初始值设定项和初始化列表之间的冲突解决方案
让我先用以下代码来回答问题:C++ 类内成员初始值设定项和初始化列表之间的冲突解决方案,c++,c++11,C++,C++11,让我先用以下代码来回答问题: struct A { explicit A(int i):a_{i} {} int a_ }; struct B { B():mya_{5} {} // Initialize mya_ (again?) A mya_{7}; // Initialize mya_ }; 在struct B中,在B的构造函数的初始值设定项列表中初始化的mya\u的类内初始值设定项与mya\u之间存在冲突。这是如何解决的,根据C++标准,当代码< b>代码>的构造
struct A
{
explicit A(int i):a_{i} {}
int a_
};
struct B
{
B():mya_{5} {} // Initialize mya_ (again?)
A mya_{7}; // Initialize mya_
};
在
struct B
中,在B
的构造函数的初始值设定项列表中初始化的mya\u
的类内初始值设定项与mya\u
之间存在冲突。这是如何解决的,根据C++标准,当代码< b>代码>的构造完成时,struct B
{
B():mya_{5} {}
B(int) {}
A mya_{7};
};
int main
{
B b0; // b.mya_.a_ is 5
B b(42); // b.mya_.a_ is 7
}
从12.6.2初始化基和成员[class.base.init]
如果给定的非静态数据成员同时具有
大括号或相等的初始值设定项和mem初始值设定项,初始化
执行mem初始值设定项指定的,并且
忽略成员的大括号或相等初始值设定项。[示例:给定
A(int)构造函数将简单地将i初始化为arg的值,
我的支架或同等初始化器的副作用不会发生
地点-结束示例]
初始化列表获胜。如果您有另一个未初始化成员的构造函数,则就地初始化将获胜 比如说,
struct B
{
B():mya_{5} {}
B(int) {}
A mya_{7};
};
int main
{
B b0; // b.mya_.a_ is 5
B b(42); // b.mya_.a_ is 7
}
从12.6.2初始化基和成员[class.base.init]
如果给定的非静态数据成员同时具有
大括号或相等的初始值设定项和mem初始值设定项,初始化
执行mem初始值设定项指定的,并且
忽略成员的大括号或相等初始值设定项。[示例:给定
A(int)构造函数将简单地将i初始化为arg的值,
我的支架或同等初始化器的副作用不会发生
地点-结束示例]
初始化列表获胜。如果您有另一个未初始化成员的构造函数,则就地初始化将获胜 比如说,
struct B
{
B():mya_{5} {}
B(int) {}
A mya_{7};
};
int main
{
B b0; // b.mya_.a_ is 5
B b(42); // b.mya_.a_ is 7
}
从12.6.2初始化基和成员[class.base.init]
如果给定的非静态数据成员同时具有
大括号或相等的初始值设定项和mem初始值设定项,初始化
执行mem初始值设定项指定的,并且
忽略成员的大括号或相等初始值设定项。[示例:给定
A(int)构造函数将简单地将i初始化为arg的值,
我的支架或同等初始化器的副作用不会发生
地点-结束示例]
初始化列表获胜。如果您有另一个未初始化成员的构造函数,则就地初始化将获胜 比如说,
struct B
{
B():mya_{5} {}
B(int) {}
A mya_{7};
};
int main
{
B b0; // b.mya_.a_ is 5
B b(42); // b.mya_.a_ is 7
}
从12.6.2初始化基和成员[class.base.init]
如果给定的非静态数据成员同时具有
大括号或相等的初始值设定项和mem初始值设定项,初始化
执行mem初始值设定项指定的,并且
忽略成员的大括号或相等初始值设定项。[示例:给定
A(int)构造函数将简单地将i初始化为arg的值,
我的支架或同等初始化器的副作用不会发生
地点-结束示例]