左值与右值

转载 2007年10月03日 12:10:00

本文摘自:http://jiang5005.spaces.live.com/blog/cns!619F3DE8AB99988E!111.entry?action=post&wa=wsignin1.0

8月20日 C++中的左值和右值

C++中的左值和右值

1.  概念
变量和文字常量都有存储区,并且有相关的类型,区别在于变量是可寻址的;
 
对于每个变量,都有2个值与其相关联:
1>数据值,存储在某个内存地址中,也称右值(rvalue),右值是被读取的值(read value),文字常量和变量都可被用于右值。
2>地址值,即存储数据值的那块内存地址,也称左值(lvalue),文字常量不能被用作左值。
 
2 . 问题
给表达式加上括号: ++a--
结果 ++(a--)
 
这个表达式是非法的,因为前增量操作要求一个可修改的左值,而 "a--" 不是左值(即右值)
 
3 . 前增量和后增量的区别
早期的c语言教材,for循环语句通常写成:
for(int i=0;i<10;i++)
而现在多为:
for(int i=0;i<10;++i)
 
两者有区别吗?
 
a++ 即是返回 a的值,然后变量 a 加 1,返回需要产生一个临时变量类似于
{
       int temp = a;
       a=a+1;
       return temp;  //返回右值
}
 
++a 则为:
{
    a=a+1;
    return &a;    //返回左值
}
 
显然,前增量不需要中间变量,效率更高。

相关文章推荐

左值和右值

  • 2013年07月15日 15:16
  • 1KB
  • 下载

指针和数组(数组名a作为左值和右值的区别)

简单而言,出现在赋值符“=”右边的就是右值,出现在赋值符“=”左边的就是左值。比如,x=y。 左值:在这个上下文环境中,编译器认为x的含义是x所代表的地址。这个地址只有编译器知道,在编译的时候确定,...

[C++11]_[初级]_[左值引用声明和右值引用声明]

场景: 在 remove_reference 结构体中能看到右值引用的身影 &&, 那么这里的右值引用到底有什么用呢? 经常也发现int& 和int&& 这两种类似的应用类型,第一种是左值引用声明,第...

[C/C++不常见语法特性]_[初级]_[左值-右值-lvalue-rvalue]

场景: 1. C++11 引入了std::move,它可以高效率的从一个左值资源移动到另一个左值资源里, 这个过程不需要再创建新的资源. 这对std::string,std::vector这种标...

C++:浅谈c++资源管理以及对[STL]智能指针auto_ptr源码分析,左值与右值

C++:浅谈c++资源管理以及对[STL]智能指针auto_ptr源码分析标签:STL 智能指针 auto_ptr 源码分析by 小威威// 2016.05.01 对第三部分源码分析中的复制构造函...
  • linwh8
  • linwh8
  • 2016年04月28日 00:31
  • 3856

困扰我很久的左值和右值

百度百科搜索出来的,关于什么是左值: C/C++语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。或者说左值是代表一个内存地址值,并且通过这个内存...

C++中的左值右值

对于 C++ 中的左值和右值,我们通常的说法是:当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置),这句话来自于 《C++ Primer...

C++左值与右值之间共同与不同点解析

C++编程语言与C语言相比有很多不同之处,而且这些不同的地方有都体现着非常重要的作用。现在我们将会为大家详细介绍一下有关C++左值与右值之间的一些联系,希望能帮助大家对这一语言有一个深刻的认识。  1...

c++左值右值

左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象...

C++笔记:左值和右值

这两个概念看似简单,其实大部分人很多时候都没有细分他们的差别。最近看到primer书里讨论rvalue reference(右值的引用)时觉得自己应该再回去看看。而事实上左值和右值本身也确实很简单。...
  • fatever
  • fatever
  • 2017年05月09日 14:47
  • 68
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:左值与右值
举报原因:
原因补充:

(最多只允许输入30个字)