是否可以将类型定义之外的一种类型的转换操作符定义为非成员函数?我知道运营商之类的其他运营商也有可能 - 但是对于运营商而言是不可能的。例如,对于两个类A和B,我尝试在A和B范围之外定义转换运算符,如下所示:
operator A(const B& b)
{
A a(....);
return a;
}
答案 0 :(得分:6)
不,转换函数必须是成员函数。
来自C ++ 11,[class.conv.fct] / 1:
类
X
的成员函数没有参数,其名称格式为[operator
conversion-type-id ]从X
转换为 conversion-type-id 指定的类型。这些函数称为转换函数。
没有其他转换功能,特别是没有非成员转换功能。
答案 1 :(得分:1)
转换运算符特定于类,即它们提供了将您定义的类型转换为其他类型的方法。因此,他们必须是他们服务目的的班级成员: -
例如: -
class Rational
{
public:
operator double ();
};
这里operator double提供了将Rational对象转换为double的方法。