类类型转换
类类型转换运算符
类类型转换运算符是类的特殊成员函数,将一个类对象的值转换为其他类型。
没有显式的返回类型也没有形参,一般是const,真正的返回类型由函数名决定。
隐式类型转换
有两个转换路径,构造函数和类类型转换运算符。
显式类型转换
前面加上explicit,除了用作条件,只能显式调用。
避免二义性转换
当类中包含类型转换时,必须确保在类类型和目标类型之间只有唯一的转换方式,否则编译器会不知道该选择哪个转换,导致二义性错误。
二义性的两种情况
两个类之间存在相同的类型转换
类定义了多个与算术类型相关的转换
最佳实践
- 尽量只提供一个用户定义的类型转换(如operator int() 或 operator double() 选一个)
- 避免多个接受不同算术类型的构造函数(最好只提供 A(double),避免 A(int) + A(double) 并存)
- 显式调用转换,避免隐式转换带来的二义性问题
评论