C++赋值运算符可以是自由函数吗?

Rod*_*ddy 18 c++ operator-overloading non-member-functions

我正在尝试这样的事情:

Foo & operator=(Foo & to, const Bar &from);
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

E2239 'operator =(Foo &, const Bar &)' must be a member function
Run Code Online (Sandbox Code Playgroud)

操作员可以/不能被定义为自由函数是否有限制?如果是,为什么?

Jam*_*lis 24

赋值运算符必须是非静态成员函数,并且必须只有一个参数:

赋值运算符应由具有一个参数的非静态成员函数实现(C++ 03 13.5.3/1).

operator(),, operator[]并且operator->还必须实现为非静态成员函数.

特定于类operator newoperator delete(及其变体)必须实现为静态成员函数(请注意,这些函数是隐式静态的,即使它们未使用static关键字声明).

  • 这样做还有什么其他理由吗?有意义的是operator =成为一个成员函数,毕竟它是`three`复制控制函数之一(即复制构造函数,operator =和析构函数).但为什么其他人呢? (3认同)