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)
}
Run Code Online (Sandbox Code Playgroud)
我认为 {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}
Run Code Online (Sandbox Code Playgroud)
或更好:
auto w = P{77, 5, 42}
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,是什么导致变量构造失败
z?
构造不会失败,因为您显式初始化它:P x{a, b, c}不执行任何类型的隐式转换,而只是使用统一初始化语法来调用 的(显式)构造函数P。
| 归档时间: |
|
| 查看次数: |
2557 次 |
| 最近记录: |