美文网首页
理解c++中左值、右值

理解c++中左值、右值

作者: zhangzhifei | 来源:发表于2020-07-04 14:04 被阅读0次

说明

c/c++程序员肯定都知道左值、右值,理解好左值、右值有利于我们更好的使用c++语言。下面是我的学习笔记

概念

  1. 左值:运算符左边的值(变量),可以被取地址。如:int num = 1; num既是一个左值变量
  2. 右值:运算符的值并且不能被取地址。如int num = 1; 1是右值。
    运算符右侧的值不一定就是右值,一定要同时满足“右侧”和“不能被取址”。

右值在c++11之后

c++11将右值分为纯右值,和将亡值。但是在我们使用的之后统一理解成右值就可以了毕竟c++概念够多了。

  1. 纯右值
    函数返回的临时变量值(当然不包括临时变量的引用)
    字面值(1,‘a’等)
    lambda表达式
  2. 将亡值
    c++11后关于右值引用的表达式类型,右值引用的出现让我们可以通过引用关联右值,使用即将消亡的右值(将亡值==可以被重新使用的资源对象),对于大块的将亡值,使用右值引用可以复用内存同时减少构造、析构的开销提升程序性能。
    int && num = 1; num 即为整形右值引用。

应用举例

右值引用是很好的特性,如果我们使用c++,那就一定要用起来。目前c++标准库都是用移动语义重写,所以没有更好的理由我们一定要使用标准库,即使像交换两个变量值这样简单的功能。
看下c++11之前标准库的swap方法

template <class T> void swap ( T& a, T& b )
{
  T c(a); a=b; b=c;
}

c++11之后

template <class T> void swap (T& a, T& b)
{
  T c(std::move(a)); a=std::move(b); b=std::move(c);
}

c++标准库都在使用右值引用,我们有什么理由不开始用起来。

相关文章

网友评论

      本文标题:理解c++中左值、右值

      本文链接:https://www.haomeiwen.com/subject/rjkuqktx.html