请问(n++)++;这句为何会编译错误?
error C2105: '++' needs l-value。
我认为最多不过是第二次增量操作对临时变量进行的操作,n只增加了一次罢了。为何编译都错误呢?
[解决办法]
n++的结果不是左值, 所以不能再++了.
[解决办法]
就像这样的操作也是错误的一样:
int n = 1;
(n++) = 5; //错误, =号左边需要左值
[解决办法]
n++不产生临时变量,不可作为左值
++n产生临时变量,可以作为左值
(++n)++可以通过编译
[解决办法]
弄错了,也不是产生临时变量。
n++ 不返回变量
++n 将n返回为左值
[解决办法]
n++不产生临时变量,不可作为左值
++n产生临时变量,可以作为左值
至于左右值的概念,请看C++ primer的解释
[解决办法]
后缀++操作符很特别。
首先,你的错在于没有弄清++运行原理。
++是先取值在加一,在内部他产生一个临时变量,把传进来的“l-value(左值)”付给该临时变量,
然后对参数变量进行前缀++操作,然后返回一个该临时变量的拷贝,注意这个拷贝没有名字,只有一个
内存地址和值,它用来当作“右值”对别的变量进行赋值,他是右值。
你这里实际上是把这个右值当作++操作符的参数,必须是一个变量才能加加的意思,所以这里出错了。
[解决办法]
左值 右值 问题
简单的说
左值在等式左边可以存储变量
右值在等式右边必须是确定的值
[解决办法]
临时变量一般是const性质的,初始化后的const变量不能做左值.