我浏览了很多与转换相关的问题,但似乎没有人以这种方式讨论显式关键字.这是代码:
struct B; struct A{ /*explicit*/ A(const B&){ cout << 1; } // *1 }; struct B{ /*explicit*/ operator A()const{ cout << 2; } // *2 }; void foo(const A &){} int main(void){ B b; foo( /*static_cast*/ (b) ); // *3 }
结果:(Y:未注释,N:注释,X:或者)
# | *1 | *2 | *3 |output| 1 | N | N | N |error | 2 | N | N | Y | 1 | 3 | N | Y | N | 1 | 4 | N | Y | Y | 1 | 5 | Y | N | N | 2 | 6 | Y | N | Y | 1 | 7 | Y | Y | N |error | 8 | Y | Y | Y | 1 |
1,7是错误,这是正常的.(模糊和没有自动转换)
2似乎构造函数具有更高的优先级,但为什么呢?
3,5很容易理解.
4很奇怪,因为它没有调用显式的.为什么?
6可能是由于'显式'或构造函数具有更高的优先级.哪一个是原因?8似乎构造函数具有更高的优先级,但为什么呢?
有人可以提供一些解释吗?谢谢!