Jof*_*sey 12 c++ type-conversion implicit-conversion
class C {
public:
C() { }
};
class B {
public:
B(C c) { }
B() { }
};
class A {
public:
A(bool b) { }
A(B b) { }
};
int main() {
A a1 = true; // bool -> A is allowed
A a2 = B(); // B -> A is allowed
A a3 = 7; // int -> bool -> A is allowed
A a4 = C(); // C -> B -> A isn't allowed
}
Run Code Online (Sandbox Code Playgroud)
为什么我可以使用两步隐式转换bool但不能使用它C?描述多步隐式转换的一般规则是什么?
Luc*_*ore 12
没有多步骤用户定义的隐式转换.
int -> bool -> A
Run Code Online (Sandbox Code Playgroud)
是允许的,因为int->bool转换不是用户定义的.
1类对象的类型转换可以由构造函数和转换函数指定.这些转换称为用户定义的转换,用于隐式类型转换(第4节),初始化(8.5)和显式类型转换(5.4,5.2.9).
2用户定义的转换仅在明确无误的情况下应用(10.2,12.3.2).转换遵守访问控制规则(第11条).模糊度解决(3.4)后应用访问控制.
3 [注意:有关在函数调用中使用转换的讨论以及下面的示例,请参见13.3. - 尾注]
4最多只有一个用户定义的转换(构造函数或转换函数)隐式应用于单个值.