左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量(或表达式).
int a;int b;a = 1;b = 2bbc英语听力;a = b;b = a;a + b = 3; // 非法表示
右值分为纯右值和将亡值:
纯右值:临时变量和不跟对象关联的字面量值
将亡值:在确保其他变量不再被使用或即将销毁时,通过盗取的方式,可以避免内存空间的释放和分配,能够延长变量值的生命期。右值通常不具有名字,也只能通过引用的方式找到它的存在。
首先, 对于基础类型,右值是不可被修改的(non-modifiable),也不可被 const, volatile 所修饰(cv-qualitification ignored)
其次,对于自定义的类型(ur-defined types),右值却允许通过它的成员函数进行修改。
自定义类型应该设计得和内置类型尽量一样(所谓 value type,value mantic),但允许成员函数改变右值这个特性却有意无意使得自定义类型特殊化了。
对此,我们其实可以这样想:自定义类型允许有成员函数,而通过右值调用成员函数是被允许的,但成员函数有可能不是 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 &&rread过去式2 = std::move(a); # 编译通过
到此这篇关于c++中左值和右值的区别详解的文章就介绍到这了,更多相关c++左值和右值内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 19:13:32,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/f96c6796b6e49362624bb55e857e084d.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C++中左值和右值的区别详解.doc
本文 PDF 下载地址:C++中左值和右值的区别详解.pdf
留言与评论(共有 0 条评论) |