惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
D
Docker
GbyAI
GbyAI
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
G
Google Developers Blog
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
小众软件
小众软件
Engineering at Meta
Engineering at Meta
酷 壳 – CoolShell
酷 壳 – CoolShell
I
InfoQ
B
Blog
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog

博客园 - cacard

Android中的内部类引起的内存泄露 Android的消息机制: Message/MessageQueue/Handler/Looper ArrayList/Vector的原理、线程安全和迭代Fail-Fast JVM中的Stack和Frame JVM中的垃圾收集算法和Heap分区简记 无锁编程以及CAS 简述Java内存模型的由来、概念及语义 MQTT协议简记 RabbitMQ的工作队列和路由 RabbitMQ 入门 [Java] LinkedHashMap 源码简要分析 [Java] HashMap 源码简要分析 [Java] Hashtable 源码简要分析 CentOS 安装 Hadoop 手记 树莓派(RespberryPi)安装手记 RPC简述 [C++] const与重载 [C++] 引用 Java线程池 / Executor / Callable / Future
[C++] 左值、右值、右值引用
cacard · 2013-09-06 · via 博客园 - cacard

 一般意义上的左值(lvalue)和右值(rvalue)

* lvalue 代表了对象,可通过取地址符获取地址,可赋值。L 可看做 location。

* rvalue 代表了数据,不能获取内存地址,不可赋值。

* rvalue 不能当做 lvalue,但 lvalue 可以当做 rvalue。

     * int a=0;int b=1; a=b; // b是个lvalue,可以当做rvalue。

《C++ Primer》:

* lvalue 代表了对象的身份。

* rvalue 代表了对象的值。

* 左值持久,右值短暂。

右值引用 / rvalue reference

右值引用的特点

* C++11引入,为了支持移动操作(移动构造函数)。

* 必须绑定到右值的引用称作右值引用,使用 T&& 作为类型。

* 只能绑定到一个即将销毁的对象。

* 右值引用和引用一样,也是一个对象的另一个名字而已。

* 右值引用必须绑定到一个返回右值的表达式,而左值引用恰恰相反(注意:const的左值引用也可以绑定到右值表达式上)。

变量均是左值

int&& rr1 =1 ; // rr1 是一个变量,同时也是一个右值引用类型

int&& rr2 = rr1; // 错误。右值引用不能绑定到一个左值上。即,一个右值引用对象不能绑定到另外一个右值引用对象上。

std::move()函数可将一个左值变成右值引用。