什么是operator class_name()const?

时间:2013-10-29 18:30:28

标签: c++

从第15项开始,我注意到这些代码:

class FontHandle { ... };

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

似乎Font重载了其他类的构造函数,是吗?我们通常会看到+-*/=重载定义,为什么会发生这种情况?我们应该采取哪种情况?

3 个答案:

答案 0 :(得分:3)

operator FontHandle() const { return f; }

这是转化运营商。它允许您使用Font对象,其中要求FontHandle。在这种情况下,实现只返回私有FontHandle f

的副本

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

答案 1 :(得分:3)

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

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

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

如果没有这样的运算符,上面的行会产生一个编译器错误:“无法在不相关的类型之间进行转换”

答案 2 :(得分:0)

出现在函数名后面的

const标记“this”指针常量,也就是说,不允许该方法改变对象的不变量。这样做的“副作用”是你可以在const对象上调用这个方法,因为它可以保证它“不会乱用数据成员”。

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