目录

(0)lvalue和rvalue

(1)左值引用

(2)右值引用

(3)move()


(0)lvalue和rvalue

下面是我对这两个单词字面的意思的猜测:

  1. lvalue估计来源于left value。 在赋值语句中lvalue = rvalue;位置处于左边。就是可以修改的值。
  2. rvalue估计来源于right value。处于赋值语句右边,是只读的不可修改的值。
  3. lvalue是可以赋值的,说明它是一个变量,它拥有一个内存,一定有地址。所以&lvalue是有效的,能取到在内存中的地址。
  • lvalue: 具有存储性质的对象,即lvalue对象,是指要实际占用内存空间、有内存地址的那些实体对象,例如:变量(variables)、函数、函数指针等。
  • rvalue:相比较于lvalue就是所谓的没有存储性质的对象, 也就是临时对象。

(1)左值引用

顾名思义,就是对左值(拥有存储空间)的引用,但是需要注意以下几点:

#include <stdio.h>int main()
{const int x = 5;int y = 1;int z = 1;int & tmp1 = x;     // ERROR:x不是一个可修改的左值int & tmp2 = 5;     // ERROR:5是一个右值int & tmp3 = y + z; // ERROR:y+z是一个右值return 0;
}

(2)右值引用

类似于左值引用,右值引用便是对右值的引用,它是通过两个&&来声明的。

#include <stdio.h>int main()
{int && x = 5;printf("x = %d\n", x);return 0;
}

(3)move()

std::move 会无条件将自己的参数转换为右值

void swap(vector<string> & x, vector<string> & y)
{vector<string> temp = std::move(x);x = std::move(y);y = std::move(temo);
}

c++的lvalue和rvalue以及引用相关推荐

  1. [C++] Lvalue and Rvalue Reference

    Lvalue and Rvalue Reference int a = 10;// a is in stack int& ra = a; // 左值引用 int* && pa ...

  2. 理解C++ lvalue与rvalue

    一个众所周知的危险错误是,函数返回了一个局部变量的指针或引用.一旦函数栈被销毁,这个指针就成为了野指针,导致未定义行为.而左值(lvalue)和右值(rvalue)的概念,本质上,是理解"程 ...

  3. C++,创建临时变量传递给参数为常量的函数,lvalue与rvalue的转换。

    在开始之前,先来看一个例子 void func(const int& a); int main() {int b=1;func(b*2); //正常运行func(2); //报错 } 首先,注 ...

  4. 理解lvalue和rvalue

    理解lvalue和rvalue Lvalues and Rvalues An object is a region of storage that can be examined and stored ...

  5. 关于lvalue and rvalue

    2019独角兽企业重金招聘Python工程师标准>>> lvalue :An object is a region of storage that can be examined a ...

  6. C和C++里面的lvalue 和 rvalue的释义

        在看gcc的文档的时候,看到一个词lvalue,查了金山词霸其释义为 lvalue [计] 左值.因为的确在介绍编译原理的课程中听过这个词,大致知道其意思就没有多想.但是看完gcc文档的这个篇 ...

  7. std:forward 完美转发

    概述:     // TEMPLATE CLASS identity template<class _Ty>     struct identity     {    // map _Ty ...

  8. c++中的左值与右值

    转载自 http://www.cnblogs.com/catch/p/3500678.html 左值 (lvalue)和右值 (rvalue) 是 c/c++ 中一个比较晦涩基础的概念,有的人可能甚至 ...

  9. C++中的左值和右值

    左右值的概念 C++中左值(lvalue)和右值(rvalue)在C++11后变得尤为重要,是理解 move.forward等新语义的基础. 左值和右值这两个概念是从C中传承过来的. 左值指的是:既能 ...

最新文章

  1. PHP实现上一篇、下一篇
  2. 自动滚放的html,HTML5实现视频播放器随页面滚动固定页面右下角效果详解
  3. 机器人水库涵洞检测_【展商秀】广州市江达潜水疏浚工程有限公司将携水下清淤机器人重磅亮相2020城市管网展览会...
  4. 搭建代码审查系统Gerrit
  5. matlab取整函数与取余函数
  6. AS-修改APP图标和名字
  7. 信息系统项目管理(二)网络协议、网络存储技术、网络工程、数据仓库和中间件
  8. 更改计算机bios密码怎么办,计算机BIOS通用密码的修改
  9. sif一线通输出协议以及代码实现
  10. 真-vue使用jsonp跨域
  11. Flutter各种虚线实战和虚线边框原理
  12. python中字节(bytes)是如何转换成整型(long)的?
  13. 一分钟教你批量制作视频的胶卷效果
  14. 通过腾讯云cos做视频点播服务
  15. kafka的安装及基本使用
  16. Spark2.0机器学习系列之2:Logistic回归及Binary分类(二分问题)结果评估
  17. 虚拟机安装mysql8步骤
  18. 长径比4.0金纳米棒直径4.2nm|长径比3.4金纳米棒直径10nm 长度34nm|长径比3.9金纳米棒直径10nm 长度39nm
  19. 特斯拉刹车失控地库撞墙!官方回应系地面太滑;网友:反正车没问题
  20. Docker 安装 (完整版)

热门文章

  1. ET框架-18 ET框架登录账号请求逻辑编写(3)
  2. Pandas安装与对象使用(educoder)
  3. 做生意,要想做大做强,需拥有果断的魄力,忌优柔寡断
  4. PRIDE PPP-AR II 软件在 Ubuntu 20.04.5 LTS使用随笔
  5. CDNOW用户购买行为分析 - 2020
  6. Java 基础系列(十) --- 什么是向上转型和向下转型
  7. day7集合和字符串
  8. FPGA中值滤波实现并Modelsim仿真,与MATLAB中值滤波进行对比
  9. 为什么放大会模糊?#ps教程入门基础抠图修图后期
  10. Burpsuite验证码识别插件 “captcha-killer-modified“ 使用教程(详细)