我谈到让一个类支持隐式类型转换通常是一个不好的主意。当然,这条规则有一些例外,最普通的一种就是在创建数值类型时。例如,如果你设计一个用来表现有理数的类,允许从整数到有理数的隐式转换看上去并非不合理。这的确不比 C 的内建类型从 int 到 double 的转换更不合理(而且比 C 的内建类型从 double 到 int 的转换合理得多)。在这种情况下,你可以用这种方法开始你的 Rational 类:
class Rational {
public:
Rational(int numerator = 0, // ctor is deliberately not explicit.
int denominator = 1). // allows implicit int-to-Rational
// conversions
int numerator() const. // accessors for numerator and
int denominator() const. // denominator - see Item 22