首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

自动生成的赋值操作符解决方案

2012-04-20 
自动生成的赋值操作符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;
默认生成的赋值运算符 会在两个引用之间相互赋值。这明显违背了引用可以再次赋值的 原则了

热点排行