[英]Can C++ assignment operators be free functions?
我正在尝试这样的事情:
Foo & operator=(Foo & to, const Bar &from);
但是我收到了这个错误:
E2239 'operator =(Foo &, const Bar &)' must be a member function
操作员可以/不能被定义为自由功能是否有限制?如果是,为什么?
赋值运算符必须是非静态成员函数,并且必须只有一个参数:
赋值运算符应由具有一个参数的非静态成员函数实现(C ++ 03 13.5.3 / 1)。
operator()
, operator[]
和operator->
也必须实现为非静态成员函数。
特定于类的operator new
和operator delete
(及其变体)必须实现为静态成员函数(请注意,这些函数是隐式静态的,即使它们未使用static
关键字声明)。
这不可以。
我想,原因与复制构造函数有关。 它们具有非常相似的语义,并且,您无法像其他构造函数一样在类之外定义复制构造函数。 因此,他们不想将双胞胎分开(避免双胞胎悖论:)。
PS C ++中的一个耻辱是,您无法将成员添加到现有类中。 这没有低级别的原因。 如果可能,您可以通过不在类定义标头中声明私有函数来解耦标头和cpp依赖关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.