从第15项中,我注意到以下代码:

class FontHandle { ... };

class Font {
public:
  // implicit conversion function
  operator FontHandle() const { return f; }
private:
  FontHandle f;
};


好像该类Font重载了其他类的构造函数,对吗?我们通常会看到+-*/=重载定义,但是为什么会这样?我们应该在哪些情况下这样做?

最佳答案

这是用户定义的转换运算符。

它允许从FontFontHandle的隐式转换。也就是说,它允许这样的代码:

Font f;
// ...
FontHandle fh = f;  // Conversion applied here


如果没有这样的运算符,则上面的代码行将产生“不相关类型之间无法转换”的编译器错误。

10-06 14:58