C++左值、右值

C++左值、右值

值类别

在 C++11之后,C++根据

  • 被标识:可通过不同标识符指代同一实体。(对象/内存)
  • 可移动:可作为移动语义函数的参数,例如移动构造,移动赋值。

将值分为以下类别:

  • 泛左值:被标识
  • 左值:被标识且不可移动
  • 将亡值:被标识可移动
  • 右值:可移动
  • 将亡值:被标识可移动
  • 纯右值:不被标识且可移动

左值

int a = 1;

a是一个左值,左值是关联了名称的内存位置。

纯右值

int a = 1;

1是一个纯右值,纯右值是指不被标识且可移动的值,例如字面量。

将亡值

using std::string;
string get()
{
    string ret = "abc";
    return ret;
}

string str = get();

get() 函数调用会产生一个临时变量赋给str,这个临时变量是将亡值,此时的赋值是移动语义(c++11之前是复制语义)。

Original: https://www.cnblogs.com/hggzhang/p/16400733.html
Author: 张宏港
Title: C++左值、右值

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588317/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球