C++Expression的学习笔记

Posted songyuc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++Expression的学习笔记相关的知识,希望对你有一定的参考价值。


关于不同类别表达式的举例,请参考博文《C++ 中的值类别》

1. 左值和右值的简单理解

  • 左值对应了具有内存地址的对象,而右值仅仅是临时使用的值对象。(引用自博文《C++ 中的值类别》
  • 左值有名称(变量或常量名称),右值是临时对象没有名称

2. lvalue: locator-value

快速判断标准:每次调用此表达式,值所在的地址都一样。

Note
[Arthur O’Dwyer]:
So anything with a name is always an lvalue, regardless.
所以无论如何,任何有名字的对象总是左值。

13.3 rvalue:右值

右值举例:

  • Literals(字面量)ep. 42

13.3.1 右值的特点

  • 无法建立普通引用:因为右值没有合法的固定地址

13.3.2 prvalue: pure right-value

纯右值:prvalue
Cppreference: prvalue examles

prvalue被绑定到引用上时,其生命周期会延长

这里我们参考了博文《现代C++之万能引用、完美转发、引用折叠(万字长文)》中的描述:

[有生命周期延长的情况]:
如果一个 prvalue 被绑定到一个引用上,它的生命周期则会延长到跟这个引用变量一样长。

13.4 Xvalue:亡值

13.5 Xvalue与prvalue的区别

它们的主要区别在于,xvalue表示的对象是可以被移动的,其资源可以被转移到另一个对象中,而prvalue则不能。

13.6 String literal is an lvalue; other literals are rvalues.

C++标准中明确说明了:字符串立即数会被视为左值,而其它立即数则视为右值

13.7 Rvalue-reference

对于局部变量,std::move产生的右值变量和原始变量共享相同地址

示例:Cpp_var_rref

以上是关于C++Expression的学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

JTSL/EL Expression学习

C Primer Plus学习笔记- C 控制语句:分支和跳转

C++内存管理机制学习笔记:基本构件之new/delete expression

C++内存管理机制学习笔记:基本构件之new/delete expression

C语言基础学习笔记+ C语言进阶学习笔记总结篇(坚持才有收获!)

spring in action 学习笔记十三:SpEL语言(Spring Expression Language)