c++的a = b = c和(a = b) = c有什么区别,有哪位高手知道吗

cxycappuccino 2010-08-24 10:28:58
class A
{
A & operate = (const A &other); // 赋值函数
};
A a, b, c; // a, b, c 为A 的对象

a = b = c; // 正常的链式赋值
(a = b) = c; // 不正常的链式赋值,但合法
如果将赋值函数的返回值加const 修饰,那么该返回值的内容不允许被改动。上例中,语句 a = b = c 仍然正确,但是语句 (a = b) = c 则是非法的。
=== a = b = c和(a = b) = c有什么区别,有哪位高手知道吗,c++的
...全文
3224 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainmarker 2010-08-25
  • 打赏
  • 举报
回复
优先级不同.
muzizongheng 2010-08-25
  • 打赏
  • 举报
回复 1
a = b = c; // 正常的链式赋值
(a = b) = c; // 不正常的链式赋值,但合法

1. a=b=c, 是把c的值赋给a和b, 也就是说a,b, c相等
2. (a=b)= c, 是先把b的值赋给a, 然后(a=b)的值返回的是a的变量, 此时值等于b, 然后把c的值赋给a, 也就是说a 和c 相等, 和b无关。
meisizhaosi 2010-08-24
  • 打赏
  • 举报
回复
学习学习
hastings 2010-08-24
  • 打赏
  • 举报
回复
lovestefanie 2010-08-24
  • 打赏
  • 举报
回复

int a,b,c;
a=1,b=a+2,c=b+3;
int d=(a=1,b=2,c=b+3);
cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl;
(a=1,b,c+1,d)=5;
cout<<d<<endl;

还有这样的,表示鸭梨很大
lovestefanie 2010-08-24
  • 打赏
  • 举报
回复

int a,b,c;
b=1;
c=2;
(a=b)=c;

a为2了,b还是1,为什么?
meisizhaosi 2010-08-24
  • 打赏
  • 举报
回复
上面有一点点错误,给分吧
meisizhaosi 2010-08-24
  • 打赏
  • 举报
回复
就是这个区别
const List<ElemType>& operator=(const List<ElemType>& rhs)

List<ElemType>& operator=(const List<ElemType>& rhs)

上面这个只有返回值类型不同.而
a = b = c;就是if(b!=c)先把b清空,然后复制c到b,然后if(a!=b)再把a清空,然后复制b到a
b = c 返回的可以是一个const对象或者一个非const对象,而都可以当做a的初始值

而(a=b)=c;是先算a=b,a的返回类型是const或者非const都行,但如果是const的返回类型,因为已经初始化了,所以再执行=c就不行了,而如果是非const就跟第一种一样

不知道对不对啊
bluejays 2010-08-24
  • 打赏
  • 举报
回复
如果(a = b)的返回值不是const,那么(a = b) = c是可以的。
bluejays 2010-08-24
  • 打赏
  • 举报
回复
a = b = c 这个等于 a = (b = c)
首先调用赋值函数给b赋值,然后把它的返回值赋值给a
由于a和b都不是const,所以整个过程没有任何问题。

(a = b) = c
首先调用赋值函数给a赋值,然后用c给他的返回值赋值。如果这个返回值是const,当然就不行了。
haogeai123 2010-08-24
  • 打赏
  • 举报
回复
(a = b)是一个等式,不能作为左值的啊。= 号左边的必须是可以复制的。

65,170

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧