从第 15 条,我注意到这些代码:
class FontHandle { ... };
class Font {
public:
// implicit conversion function
operator FontHandle() const { return f; }
private:
FontHandle f;
};
看起来那个类Font重载了其他类的构造函数,是吗?我们通常会看到+-*/=重载定义,但是为什么会发生这种情况?我们应该在哪些情况下这样做?
从第 15 条,我注意到这些代码:
class FontHandle { ... };
class Font {
public:
// implicit conversion function
operator FontHandle() const { return f; }
private:
FontHandle f;
};
看起来那个类Font重载了其他类的构造函数,是吗?我们通常会看到+-*/=重载定义,但是为什么会发生这种情况?我们应该在哪些情况下这样做?
operator FontHandle() const { return f; }
这是一个转换运算符。它将允许您使用需要 a 的Font对象FontHandle。在这种情况下,实现只返回 private 的副本FontHandle f。
本const例中的 告诉编译器这不会修改Font对象,因此可以与const Font对象一起使用。
这是一个用户定义的转换运算符。
它允许从到的隐式转换。也就是说,它允许这样的代码:FontFontHandle
Font f;
// ...
FontHandle fh = f; // Conversion applied here
如果没有这样的运算符,上面的行将产生一个编译器错误,类似于“不相关的类型之间不可能进行转换”
const出现在函数名之后标记“this”指针常量,即不允许该方法改变对象的不变量。这样做的“副作用”是您可以在 const 对象上调用此方法,因为可以保证它“不会摆弄数据成员”。
(如您的评论中所述,该调用是隐式转换。)