类型转换二义性概述

当类中包含类型转换时,必须确保在类类型和目标类型之间只有唯一的转换方式,否则编译器会不知道该选择哪个转换,导致二义性错误。

二义性情况

类间转换二义性

两个类之间存在相同的类型转换。

算术类型转换二义性

类定义了多个与算术类型相关的转换。

解决方案

  1. 尽量只提供一个用户定义的类型转换(如operator int() 或 operator double() 选一个)

  2. 避免多个接受不同算术类型的构造函数(最好只提供 A(double),避免 A(int) + A(double) 并存)

  3. 显式调用转换,避免隐式转换带来的二义性问题。