为何C++赋值运算符=无法在类外部定义?
关于赋值运算符
operator=必须作为类成员函数的疑问 我注意到=、()、[]这几个运算符和其他运算符不同,必须作为类的成员函数定义,无法通过友元或外部函数实现。查阅相关内容后,对其中“若未将其声明为类成员,编译器会自动生成一个,这会导致歧义”的说法存在疑惑,结合以下代码示例具体提问:
class Demo { int x; public: Demo(int x=0) { this->x = x; } friend void operator=(int&, const Demo&); // 假设这可行 }; void operator=(int& dest, const Demo& src) { dest = src.x; } int main() { int x; Demo d(10); x = d; // 期望调用operator=(x, d) }
按照说明,编译器会自动为Demo类生成默认的赋值运算符:
Demo& operator=(const Demo&)
但我定义的外部函数是:
void operator=(int&, const Demo&)
这两个函数的参数列表完全不同,为什么会产生歧义?为什么这种场景下不能在外部定义operator=?
另外看到一篇帖子给出的建议:
只有当赋值运算符的左操作数是类类型时,才能对其进行重载。无法编写左操作数为非类类型的自定义赋值运算符。
要将类对象赋值给
int类型变量,需要编写operator int()转换函数。
内容的提问来源于stack exchange,提问作者First User
相关产品推荐
相关产品推荐

