转换函数可以是非成员函数吗?

Can conversion functions be non-member functions

本文关键字:函数 成员 转换 是非      更新时间:2023-10-16

是否可以将类定义之外的一种类型到另一种类型的转换运算符定义为非成员函数?我知道对于其他操作员(如操作员)是可能的 - 但对于铸造操作员来说是不可能的。例如,对于两个类 A 和 B,我尝试在 A 和 B 作用域之外定义转换运算符,如下所示:

operator A(const B& b)
{
    A a(....);
    return a;
}

不可以,转换函数必须是成员函数。

从 C++11 开始,[class.conv.fct]/1:

没有参数且名称为 [ operator转换类型-id] 的类X的成员函数指定从X到转换类型标识指定的类型的转换。此类函数称为转换函数。

没有其他转换函数

,特别是没有非成员转换函数。

转换运算符特定于类,即它们提供了一种将定义的类型转换为其他类型的方法。因此,他们必须是他们所服务的类的成员:-

例如:-

class Rational
{
  public:
     operator double ();
};

此处运算符 double 提供了一种将 Rational 对象转换为 double 的方法。