C++如何确定深层次的隐式转换/构建对象? 例如:C++,如何确定隐式转换/构造函数?
struct A {};
struct B: A {};
struct C { operator B() { return B(); } };
void f(A a) {}
int main(void)
{
f(C());
}
是否创造一切可能的转换的树,并选择合适的终端?还有别的吗?谢谢
C++如何确定深层次的隐式转换/构建对象? 例如: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
)。具有不匹配参数的调用在需要零个或一个用户定义的转换时成功。如果不同的转换(内置或用户定义的)会成功,那么,如果所有可能的方式在他们所需的转换次数/种类上都相同,则调用不明确,编译器需要发出诊断。
编译器是如何实现这一点的不是标准规定的。
标准没有指定这个。它只是说明了结果。每个不同的编译器供应商都可以按照他们选择的方式来实现,只要它们给出正确的结果。
因此,有可能是一大堆不同的方法在那里
发布一些可编译的代码。如果你编译它,甚至可以回答你的问题。 – 2010-03-14 19:48:06