后自增操作符产生的是右值
发布网友
发布时间:2022-04-22 09:14
我来回答
共5个回答
热心网友
时间:2023-10-23 16:33
C/C++语言支持前自增操作符(++a)和后自增操作符(a++),含义有微小的差别:前自增操作符首先把变量的值增加1保存在变量中,然后返回变量的值;后自增操作符首先返回变量的值,然后再把变量值增加1保存在变量中。
需要说明的是,a++或者++a返回右值。所谓右值就是一个临时变量,没有名字,所以不能对其修改。而且,计算出这个算术表达式之后很快该变量就消失。
比如int result=a++;语句中,a++的返回值保存在一个临时变量中,把这个临时变量的值赋给result后,这个临时变量就释放了。
后自增操作符是与前面一个操作数结合,a++++中前面两个加号是右自增操作符,但是后两个加号就解释不通了。因为自增操作符必须对变量(具有名字的)操作。
++++a则不同:前自增操作符与后面一个操作数结合(当然也必须是具有名字的变量),所以后面两个加号可以理解为前自增操作符。操作结果直接保存在该变量(a)中。前两个加号也是前自增操作符。
右值:不能对其进行更改;
左值:可以对其进行赋值等操作。
总之,a++返回的是右值:该值是变量a的一个副本,该副本变量没有名字,因此不能对之进行自增运算,因为它占有的空间马上就释放掉了。++a直接把a加上1然后保存在a中,该过程没有产生临时变量,对++a的访问仍然是在访问a变量,因此还可以继续对其进行操作。追问而第二个加号可以理解为+操作符,该操作符对变量或者一个数操作后返回变量或者数的值。第一个加号也是这一意思。
int i=1;++++i;得到的i值是3
追答Sorry,刚才我犯错误了,现在改正了。
热心网友
时间:2023-10-23 16:33
这个简单。楼主知道不知道左值有右值的区别呢?
其实这取决于++左结合操作符号的操作函数,楼主可以研究下:编译器中对于++a的调用相当于
int operator++ (int)
而++右操作符操作函数时,相当于这样,返回的依然是一个int型,所以无论++在a的左边多少个都是可以的。
const int operator++()
注意这里返回的是一个const的,const只能作为右值,而不能作为左值的。所以a++是可以的,但是a++++就不行,因为a++返回的是一个const的int值,而该值是不能改变的,所以a++++不行。
楼主懂了吗?
热心网友
时间:2023-10-23 16:34
a++返回的是a的值,是值,所以不能在++
++(a++)也是错误的。
而++a返回的是a+1之后的a的副本(&a),所以可以继续++(++a)
by vase
热心网友
时间:2023-10-23 16:34
两种都是不可以的!
a本来是左值,而(a++)和(++a)只能是右值。
根据 ++ 规则,只能作用于左值,不能作用于右值。
热心网友
时间:2023-10-23 16:35
顶LaceTao。不过好像,有参数的是后缀的++吧,另前缀的++据说返回的是引用?确认下。