码迷,mamicode.com
首页 > 其他好文 > 详细

从左值的定义来看i++为什么不能作为左值,而++i可以作为左值

时间:2019-01-12 13:11:42      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:baidu   引用   临时   符号   图片   实现   空间   意思   行操作   

  今天看书见到如下代码:

  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可以作为左值

标签:baidu   引用   临时   符号   图片   实现   空间   意思   行操作   

原文地址:https://www.cnblogs.com/SupremeBoy/p/10259271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!