什么是运算符 class_name() 常量

what is operator class_name() const?

本文关键字:常量 name 运算符 class 什么      更新时间:2023-10-16

从第 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

如果没有这样的运算符,上面的行将产生编译器错误,类似于"不相关类型之间无法转换"

operator FontHandle() const { return f; }

这是一个转换运算符。它将允许您在需要FontHandle的地方使用Font对象。在这种情况下,实现仅返回私有FontHandle f的副本。

此示例中的const告诉编译器,这不会修改Font对象,因此可以与const Font对象一起使用。

const出现在函数名之后,标记了"this"指针常量,即不允许该方法改变对象的不变性。这样做的"副作用"是您可以在 const 对象上调用此方法,因为可以保证它"不会摆弄数据成员"。

(如您的评论中所述,该调用是隐式转换。