我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++中左值和右值的区别详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++中左值和右值的区别详解

左值右值定义:

左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量(或表达式).

int a;
int b;
a = 1;
b = 2;

a = b;
b = a;

a + b =  3; // 非法表示

右值分为纯右值和将亡值:

纯右值:临时变量和不跟对象关联的字面量值

将亡值:在确保其他变量不再被使用或即将销毁时,通过盗取的方式,可以避免内存空间的释放和分配,能够延长变量值的生命期。右值通常不具有名字,也只能通过引用的方式找到它的存在。

特性

首先, 对于基础类型,右值是不可被修改的(non-modifiable),也不可被 const, volatile 所修饰(cv-qualitification ignored)

其次,对于自定义的类型(user-defined types),右值却允许通过它的成员函数进行修改。

自定义类型应该设计得和内置类型尽量一样(所谓 value type,value semantic),但允许成员函数改变右值这个特性却有意无意使得自定义类型特殊化了。
对此,我们其实可以这样想:自定义类型允许有成员函数,而通过右值调用成员函数是被允许的,但成员函数有可能不是 const 类型,因此通过调用右值的成员函数,也就可能会修改了该右值

左值引用, 右值引用

引用类型本身并不拥有所绑定对象的内存,只是该对象的一个别名。

左值引用是具名变量值的别名,右值引用是不具名(匿名)变量的别名。

常量左值引用是个万能引用类型,可接受常量左值(带有const),非常量左值和右值对其初始化。常量左值引用的右值在其生命期内只能是只读的

请添加图片描述

E.g.1

int &a = 2;       # 左值引用绑定到右值,编译失败

int b = 2;        # 非常量左值
const int &c = b; # 常量左值引用绑定到非常量左值,编译通过
const int d = 2;  # 常量左值
const int &e = c; # 常量左值引用绑定到常量左值,编译通过
const int &b =2;  # 常量左值引用绑定到右值,编程通过

E.g.2

int a;
int &&r1 = c;             # 编译失败
int &&r2 = std::move(a);  # 编译通过

总结

到此这篇关于C++中左值和右值的区别详解的文章就介绍到这了,更多相关C++左值和右值内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++中左值和右值的区别详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++中左值和右值的区别是什么

今天给大家介绍一下C++中左值和右值的区别是什么。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。左值右值定义:左值指的是既能够出现在等号左边也能出现在等号右边的
2023-06-29

C++ 函数左侧值引用和右侧值引用参数的区别

c++++中左侧和右侧值引用参数的不同之处如下:左侧值引用 (&) 指向已有对象,用于修改其状态。右侧值引用 (&&) 指向临时对象,用于获取或传递其数据。C++ 函数左侧值引用和右侧值引用参数的区别背景C++ 中的引用是变量的别名,允许
C++ 函数左侧值引用和右侧值引用参数的区别
2024-04-19

C++ 函数左值和右值参数传递的性能比较

左值和右值参数传递的性能差异左值参数传递存在副本开销,降低性能,尤其是对于大型对象。右值参数传递避免副本开销,提升性能,尤适用于临时对象或字面量。C++ 函数左值和右值参数传递的性能比较在 C++ 中,函数参数传递可以采用左值或右值的方式
C++ 函数左值和右值参数传递的性能比较
2024-04-21

C++中左值与右值的概念与应用方法是什么

这篇文章主要讲解了“C++中左值与右值的概念与应用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中左值与右值的概念与应用方法是什么”吧!什么是左值与右值?左值(Lvalue)
2023-07-05

android中Intent传值与Bundle传值的区别详解

举个例子我现在要从A界面跳转到B界面或者C界面 这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两遍添加值的方法 那么 如果我用1个Bundle 直接把值先存里边 然后再存到Intent中 不就更简
2022-06-06

sql中的左连接和右连接的区别

sql 中左连接和右连接的区别在于优先连接的表:左连接优先连接左表,而右连接优先连接右表。因此,当处理包含 null 值的表时,左连接将确保返回左表中的所有行,而右连接将确保返回右表中的所有行,即使在另一表中没有匹配行时也会如此。SQL 中
sql中的左连接和右连接的区别
2024-05-10

mysql中null和空值的区别

null表示未知且无意义的值,而空值表示未赋值或未初始化的值。两者的差异在于:语义差异、数据库处理方式、查询优化影响、数据完整性影响,可通过mysql提供的操作符区分。MySQL 中 NULL 和空值的差别什么是 NULL?NULL 代
mysql中null和空值的区别
2024-05-01

mysql中null和空值的区别

null表示未知且无意义的值,而空值表示未赋值或未初始化的值。两者的差异在于:语义差异、数据库处理方式、查询优化影响、数据完整性影响,可通过mysql提供的操作符区分。MySQL 中 NULL 和空值的差别什么是 NULL?NULL 代
mysql中null和空值的区别
2024-05-01

mysql中内连接,左连接和右连接的区别

mysql 中内连接、左连接和右连接的区别在于:内连接只返回同时在两个表中匹配的行,而左连接返回左表所有行,包含匹配右表行,右连接返回右表所有行,包含匹配左表行。内连接语法:select * from table1 inner join t
mysql中内连接,左连接和右连接的区别
2024-04-29

C++中初始化和赋值的区别是什么

这篇文章给大家介绍C++中初始化和赋值的区别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。对于基本数据类型差别不大:比如:int a = 12; // initialization, copy 0X000C to
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录