C++中关于类型转换的问题
本文介绍了C++中关于类型转换的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
C++ Primer上说,
struct B;
struct A{
A()=default;
A(const B&);
};
struct B{
operator A() const;
}
A f(const A&);
B b;
A a=f(b);//二义性错误
A a1=f(b.operator A());//正确
A a2=f(A(b));//正确
我们无法使用强制类型转换来解决二义性问题,因为强制类型转换本身也面临二义性,这句话到底是什么意思啊?这不是通过强制类型转换实现了功能吗?
解决方案
这句话到底是什么意思啊?
这句话意为:(f(b)
调用时存在二义性)使用强制类型转换(f(static_cast<A>(b))
或者f((A)b)
)无法消除这个二义性。原句为:
Note that we can’t resolve the ambiguity by using a cast—the cast
itself would have the same ambiguity.
这不是通过强制类型转换实现了功能吗?
没有,例子中的两次正确调用都未使用强制转换。第一次调用是通过显式调用B的转换函数(conversion function)消除二义性,第二次调用是通过显式类型转换来消除二义性。
简单的说,在这里使用强制类型转换无法消除调用的二义性是因为,强制转换本身需要一个可行的转换序列,但可以通过转换构造函数(converting constructor)和转换函数分别获得两个可行的转换序列,且两者不存在优劣(?)之分。
非相关:
但这里是否有真的有二义性似乎存疑。
这篇关于C++中关于类型转换的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文