自动生成的赋值操作符解决方案
自动生成的赋值操作符C/C++ code#include iostream#include stringusing namespace stdclass A{publi
自动生成的赋值操作符
C/C++ code#include <iostream>#include <string>using namespace std;class A{public : A(string & name) : m_name(name) {}private : string & m_name;};int main(void){ string s1("chelu"); string s2("wang"); A a1(s1), a2(s2); a1 = a2; //为什么非法?}
对于自动合成的赋值操作符,难道不能这样理解?
a1 = a2;的含义是更改a1.m_name引用的s1为a2引用的string内容,即将s1更改为s2?
[解决办法]楼主需要开始看《effective c++》了。
自动生成赋值操作符是有若干前提的。
[解决办法] a1 = a2; //为什么非法?
因为你 A里面是 引用成员 string & m_name;
默认生成的赋值运算符 会在两个引用之间相互赋值。这明显违背了引用可以再次赋值的 原则了