class P {
public:
explicit P( int a, int b, int c) {
std::cout<<"calling explicit constructor"<<"\n";
}
};
int main() {
P z {77,5,42}; // OK
P w = {77,5,42}; // ERROR due to explicit (no implicit type conversion allowed)
}
我认为{77,5,42}
具有的隐式类型std::initialization_list<int>
。如果是这样的话,什么不导致变量构造失败z
?
我认为
{77,5,42}
具有隐式类型std::initialization_list<int>
{77,5,42}
本身没有类型。如果您编写,auto x = {77, 5, 42}
则x
类型为initializer_list
。您的示例类型P
具有显式构造函数。实际上,这意味着您必须编写:
P w = P{77, 5, 42}
或更好:
auto w = P{77, 5, 42}
如果是这样的话,什么不导致变量构造失败
z
?
构造不会失败,因为您正在显式初始化它:P x{a, b, c}
不会执行任何隐式转换,而只是使用统一的初始化语法来调用的(显式)构造函数P
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句