条款24:若所有参数皆需类型转换,请为此采用 non-member 函数
Declare non-member functions when type conversions should apply to all parameters.
令 classes 支持隐式类型转换通常是个糟糕的行为,但也是有例外的,最常见的例外就是在建立数值类型的时侯。
考虑一个有理数类,允许整数隐式转换为有理数似乎很有道理:
现在研究一下这个类的乘法实现:
第一行的运算之所以成功是因为发生了隐式类型转换(implicit type conversion),编译器会自动调用 Rational 的构造函数将 int 变成 Rational。当然,只有在构造函数为 non-explicit 时,编译器才会这样做。所以为了实现混合运算,应该让 operator*
成为一个 non-member 函数:
Last updated
Was this helpful?