我正在尝试这样的事情:
Foo & operator=(Foo & to, const Bar &from);
但是我收到了这个错误:
E2239 'operator =(Foo &, const Bar &)' must be a member function
对哪些运算符可以/不能定义为自由函数有限制,如果是,为什么?
答案 0 :(得分:24)
赋值运算符必须是非静态成员函数,并且必须只有一个参数:
赋值运算符应由具有一个参数的非静态成员函数实现(C ++ 03 13.5.3 / 1)。
operator()
,operator[]
和operator->
也必须作为非静态成员函数实现。
特定于类的operator new
和operator delete
(及其变体)必须作为静态成员函数实现(请注意,这些是隐式静态的,即使它们未使用static
声明关键字)。
答案 1 :(得分:-1)
它不能。
我猜,原因与复制构造函数有关。它们具有非常相似的语义,并且,您无法像其他构造函数一样在类之外定义复制构造函数。因此,他们不想将双胞胎分开(避免双胞胎悖论:)。
P.S。 C ++中的耻辱是,您无法将成员添加到现有类中。这没有低级别的原因。如果可能的话,你可以通过不在类定义头中声明私有函数来解耦header和cpp依赖关系。