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

 更新时间:2022年01月27日 08:55:28   作者:king9666  
大家好,本篇文章主要讲的是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++左值和右值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++日历拼图的解法你了解吗

    C++日历拼图的解法你了解吗

    这篇文章主要为大家详细介绍了日历拼图C++的解法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C语言设计前中后队列实例代码

    C语言设计前中后队列实例代码

    队列最主要的作用就是用来管理数据流的,防止数据因为传输频率过快得不到及时处理而丢失,下面这篇文章主要给大家介绍了关于C语言设计前中后队列的相关资料,需要的朋友可以参考下
    2021-12-12
  • Qt常用容器类的使用

    Qt常用容器类的使用

    本文主要介绍了Qt常用容器类的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • VS2010 C++ 配置优化方案

    VS2010 C++ 配置优化方案

    使用VS2010的时候,发现了不少问题,而本文则是介绍使用中需要的问题,已经解决方案。
    2014-10-10
  • C++读取注册表的实现方法

    C++读取注册表的实现方法

    这篇文章主要介绍了C++读取注册表的实现方法的相关资料,希望通过本文能帮助到大家,让大家理解掌握实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • C语言实现飞机游戏(2)

    C语言实现飞机游戏(2)

    这篇文章主要介绍了C语言实现飞机游戏的第二部分,进行功能完善,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Qt+Quick实现图片演示器的开发

    Qt+Quick实现图片演示器的开发

    这篇文章主要为大家详细介绍了Qt如何利用Quick实现图片演示器的开发,文中的示例代码讲解详细,对我们学习Qt有一定的帮助,需要的可以参考一下
    2023-01-01
  • C++详解PIMPL指向实现的指针

    C++详解PIMPL指向实现的指针

    PIMPL 是 C++ 中的一个编程技巧,意思为指向实现的指针。具体操作是把类的实现细节放到一个单独的类中,并用一个指针进行访问
    2022-07-07
  • C++实现strcpy函数实例

    C++实现strcpy函数实例

    这篇文章主要介绍了C++实现strcpy函数实例,步骤讲解的很详细,对大家的学习或工作具有一定的参考借鉴价值,感兴趣的朋友跟随小编一起来研究吧
    2020-12-12
  • C++实现俄罗斯方块

    C++实现俄罗斯方块

    这篇文章主要为大家详细介绍了C++实现俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01

最新评论