2

C++ 如何确定几层深的对象的隐式转换/构造?例如:

struct A {};
struct B: A {};
struct C { operator B() { return B(); } };

void f(A a) {}

int main(void)
{
    f(C());
}

它是否创建所有可能转换的树并选择适当的终端?还有什么?谢谢

4

2 回答 2

4

调用f()将需要两次转换,一次是用户定义的转换 ( Cto B),一次是内置转换 (derived-to-base: Bto A)。当需要零次或一次用户定义的转换时,使用不匹配参数的调用会成功。如果不同的转换(内置的或用户定义的)会成功,那么,如果所有可能的方法在他们需要的转换数量/种类上都相等,则调用是不明确的,编译器需要发出诊断。

标准没有指定编译器如何实现这一点。

于 2010-03-14T19:51:03.107 回答
2

标准没有规定这一点。它只指定结果。每个不同的编译器供应商都可以以他们选择的任何方式实现这一点,只要他们给出正确的结果。

所以可能有很多不同的方法

于 2010-03-14T19:47:24.787 回答