C ++,如何确定隐式转换/构造函数?

时间:2010-03-14 19:41:09

标签: c++ constructor implicit implicit-cast

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

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

void f(A a) {}

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

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

2 个答案:

答案 0 :(得分:4)

f()的调用需要两次转换,一次是用户定义的转换(CB)和一次内置转换(派生到基础:{{1到B)。具有不匹配参数的调用在需要零个或一个用户定义的转换时成功。如果不同的转换(内置或用户定义)成功,那么,如果所有可能的方式在所需的转换数量/类型上相等,则调用是不明确的,并且编译器需要发出诊断。

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

答案 1 :(得分:2)

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

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