返回信息流碰到的一道题问以下写法哪个正确?
A. x++=y++ B. ++x=++y
为什么A不正确而B就正确?
上机试了,说是A的情况不能做左值,但是不太明白。
对于B式,若x=2,y=3,则结果为x=y=4,这个x=4是怎么个先后顺序得出的?++x不是还有个x=x+1的过程的吗?
这是一条镜像帖。来源:北邮人论坛 / cpp / #28336同步于 2009/9/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
为什么x++=y++不正确而++x=++y就正确?
dongri
2009/9/9镜像同步22 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
后置自增运算符返回右值
前置自增运算符返回对象本身
至于B,赋值运算符优先级低于算术运算符,x自增变成3,y自增变成4,然后赋值给x
所以x、y都是4
话说B式是C++的语法吧……gcc编译通不过 =。=
【 在 Raiden 的大作中提到: 】
: 后置自增运算符返回右值
: 前置自增运算符返回对象本身
: 至于B,赋值运算符优先级低于算术运算符,x自增变成3,y自增变成4,然后赋值给x
: ...................
后置自增运算符返回右值
前置自增运算符返回对象本身
那又怎么了,只有返回右值才能做左值吗?
是C++的,在VC上试的。
右值不能作为赋值的目标啊~
【 在 dongri 的大作中提到: 】
: 后置自增运算符返回右值
: 前置自增运算符返回对象本身
: 那又怎么了,只有返回右值才能做左值吗?
: ...................
右值当左值用
【 在 dongri 的大作中提到: 】
: 后置自增运算符返回右值
: 前置自增运算符返回对象本身
: 那又怎么了,只有返回右值才能做左值吗?
: ...................
【 在 Raiden (Raiden·Jack·雷电) 的大作中提到: 】
: 标 题: Re: 为什么x++=y++不正确而++x=++y就正确?
: 发信站: 北邮人论坛 (Wed Sep 9 19:31:47 2009), 站内
:
: 后置自增运算符返回右值
: 前置自增运算符返回对象本身
:
: 至于B,赋值运算符优先级低于算术运算符,x自增变成3,y自增变成4,然后赋值给x
: 所以x、y都是4
`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
x=2;y=3;++x=++y;
最后x到底是多少是不确定的..
:
: 话说B式是C++的语法吧……gcc编译通不过 =。=
: --
:
: I am lightning, the rain transformed.
:
: ※ 修改:·Raiden 于 Sep 9 19:37:37 修改本文·[FROM: 118.229.167.*]
: ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 118.229.167.*]
呃……对~
谢谢 :-)
【 在 sunway 的大作中提到: 】
: `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: x=2;y=3;++x=++y;
: 最后x到底是多少是不确定的..
【 在 Raiden 的大作中提到: 】
: 呃……对~
: 谢谢 :-)
为什么不能保证呢?
那 *x++=*y++怎么解释?
如果x、y是指针的话。
{
*x = *y;
x++;
y++;
}
【 在 mysubid (狂奔的蜗牛) 的大作中提到: 】
: 为什么不能保证呢?
: 那 *x++=*y++怎么解释?
: 如果x、y是指针的话。
: ...................
等号左边需要是左值
x++ = 。。。
这个左边是个临时变量,不能作为左值
*(x++) = 。。。
这里*(临时变量)是个左值
【 在 mysubid (狂奔的蜗牛) 的大作中提到: 】
: 为什么不能保证呢?
: 那 *x++=*y++怎么解释?
: 如果x、y是指针的话。
: ...................