从左值的定义来看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,它是程序中定义的可寻址变量的引用,所以它可以作为左值。

  

猜你喜欢

转载自www.cnblogs.com/SupremeBoy/p/10259271.html