从左值的定义来看i++为什么不能作为左值,而++i可以作为左值
Posted supremeboy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从左值的定义来看i++为什么不能作为左值,而++i可以作为左值相关的知识,希望对你有一定的参考价值。
今天看书见到如下代码:
int a=2;
++a++;
根据操作符的优先级和结合性知,操作符++的优先级为3,结合性为右结合,即++a++;可以理解为++(a++);
但我把代码放在vs2015上,结果报错,如图:
意思就是所a++不能作为左值,那a++为什么不能作为左值呢?我们先来看左值的定义:
左值(lvalue) 是B语言/C语言/C++语言等类C语言中的一类表达式。“左”(left)的原意是指可以放在赋值符号“=”的左边,但其实也表示能作为&和++等操作符的操作数(B语言中已经如此)。左值不但具有空间实体,还具有读写访问权。
现在我们来看a++的实现:
int temp;
temp=a;
a=a+1;
return temp;
因为a++返回的是编译器自动分配的临时变量temp,而这个temp并不是你程序中定义的可寻址变量的引用 ,也就是说你不能通过地址对它进行操作.(换句话说就是不能作为左值)。
而++a的实现为:
a=a+1;
return a;
因为++a返回的是a,它是程序中定义的可寻址变量的引用,所以它可以作为左值。
以上是关于从左值的定义来看i++为什么不能作为左值,而++i可以作为左值的主要内容,如果未能解决你的问题,请参考以下文章