c++的lvalue和rvalue以及引用
目录
(0)lvalue和rvalue
(1)左值引用
(2)右值引用
(3)move()
(0)lvalue和rvalue
下面是我对这两个单词字面的意思的猜测:
- lvalue估计来源于left value。 在赋值语句中lvalue = rvalue;位置处于左边。就是可以修改的值。
- rvalue估计来源于right value。处于赋值语句右边,是只读的不可修改的值。
- 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以及引用相关推荐
- [C++] Lvalue and Rvalue Reference
Lvalue and Rvalue Reference int a = 10;// a is in stack int& ra = a; // 左值引用 int* && pa ...
- 理解C++ lvalue与rvalue
一个众所周知的危险错误是,函数返回了一个局部变量的指针或引用.一旦函数栈被销毁,这个指针就成为了野指针,导致未定义行为.而左值(lvalue)和右值(rvalue)的概念,本质上,是理解"程 ...
- C++,创建临时变量传递给参数为常量的函数,lvalue与rvalue的转换。
在开始之前,先来看一个例子 void func(const int& a); int main() {int b=1;func(b*2); //正常运行func(2); //报错 } 首先,注 ...
- 理解lvalue和rvalue
理解lvalue和rvalue Lvalues and Rvalues An object is a region of storage that can be examined and stored ...
- 关于lvalue and rvalue
2019独角兽企业重金招聘Python工程师标准>>> lvalue :An object is a region of storage that can be examined a ...
- C和C++里面的lvalue 和 rvalue的释义
在看gcc的文档的时候,看到一个词lvalue,查了金山词霸其释义为 lvalue [计] 左值.因为的确在介绍编译原理的课程中听过这个词,大致知道其意思就没有多想.但是看完gcc文档的这个篇 ...
- std:forward 完美转发
概述: // TEMPLATE CLASS identity template<class _Ty> struct identity { // map _Ty ...
- c++中的左值与右值
转载自 http://www.cnblogs.com/catch/p/3500678.html 左值 (lvalue)和右值 (rvalue) 是 c/c++ 中一个比较晦涩基础的概念,有的人可能甚至 ...
- C++中的左值和右值
左右值的概念 C++中左值(lvalue)和右值(rvalue)在C++11后变得尤为重要,是理解 move.forward等新语义的基础. 左值和右值这两个概念是从C中传承过来的. 左值指的是:既能 ...
最新文章
- PHP实现上一篇、下一篇
- 自动滚放的html,HTML5实现视频播放器随页面滚动固定页面右下角效果详解
- 机器人水库涵洞检测_【展商秀】广州市江达潜水疏浚工程有限公司将携水下清淤机器人重磅亮相2020城市管网展览会...
- 搭建代码审查系统Gerrit
- matlab取整函数与取余函数
- AS-修改APP图标和名字
- 信息系统项目管理(二)网络协议、网络存储技术、网络工程、数据仓库和中间件
- 更改计算机bios密码怎么办,计算机BIOS通用密码的修改
- sif一线通输出协议以及代码实现
- 真-vue使用jsonp跨域
- Flutter各种虚线实战和虚线边框原理
- python中字节(bytes)是如何转换成整型(long)的?
- 一分钟教你批量制作视频的胶卷效果
- 通过腾讯云cos做视频点播服务
- kafka的安装及基本使用
- Spark2.0机器学习系列之2:Logistic回归及Binary分类(二分问题)结果评估
- 虚拟机安装mysql8步骤
- 长径比4.0金纳米棒直径4.2nm|长径比3.4金纳米棒直径10nm 长度34nm|长径比3.9金纳米棒直径10nm 长度39nm
- 特斯拉刹车失控地库撞墙!官方回应系地面太滑;网友:反正车没问题
- Docker 安装 (完整版)
热门文章
- ET框架-18 ET框架登录账号请求逻辑编写(3)
- Pandas安装与对象使用(educoder)
- 做生意,要想做大做强,需拥有果断的魄力,忌优柔寡断
- PRIDE PPP-AR II 软件在 Ubuntu 20.04.5 LTS使用随笔
- CDNOW用户购买行为分析 - 2020
- Java 基础系列(十) --- 什么是向上转型和向下转型
- day7集合和字符串
- FPGA中值滤波实现并Modelsim仿真,与MATLAB中值滤波进行对比
- 为什么放大会模糊?#ps教程入门基础抠图修图后期
- Burpsuite验证码识别插件 “captcha-killer-modified“ 使用教程(详细)