C++ 如何确定几层深度的对象的隐式转换/构造? 例如:
struct A {};
struct B: A {};
struct C { operator B() { return B(); } };
void f(A a) {}
int main(void)
{
f(C());
}
它是否创建所有可能转换的树并选择适当的终端?还有别的事吗?谢谢
最佳答案
对 f()
的调用需要两次转换,一次用户定义的转换(C
到 B
)和一次内置转换转换(派生到基数:B
到 A
)。当需要零个或一个用户定义的转换时,具有不匹配参数的调用会成功。如果不同的转换(内置或用户定义的)会成功,那么,如果所有可能的方式在所需的转换数量/类型上都相同,则调用是不明确的,并且编译器需要发出诊断。
标准没有指定编译器如何实现这一点。
关于C++,隐式转换/构造函数是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443479/