【C++11/C++17】左值与右值

左值和右值是C++中的两个重要概念,它们涉及到变量的存储位置和生命周期。

左值(Lvalue)

  • 左值表示一块具有确定地址的内存单元。
  • 它表示一个具体的、明确存在的存储单元。
  • 可以被取地址运算符(&)获取其地址。
  • 变量、数组元素、函数参数等都是左值。

右值(Rvalue)

  • 右值表示一个临时的、不拥有自己名字的内存单元。
  • 它通常出现在赋值语句的右侧,如常量、字面量、临时对象等。
  • 不能被取地址运算符(&)获取其地址。
  • 右值通常在表达式完成后就会被销毁,其内容通常只存在表达式执行时的一刹那。
总的来说,左值和右值的主要区别在于它们的生命周期和是否可以被取地址。左值有明确的存储位置并且可以被取地址,而右值是临时的并且不能被取地址。

在C++中,左值和右值的使用有以下场景:

  1. 移动语义:允许开发者从函数中返回一个对象,并且这个对象在返回后不会被销毁。这通常通过返回一个右值引用并使用移动构造函数来实现。
  2. 完美转发:通过使用右值引用,可以将函数参数完美转发给其他函数,保留原有参数的所有信息(如const和lvalue/rvalue属性)。
  3. emplace_back()方法:在使用标准容器如std::vector时,如果需要直接构造元素而不是复制或移动现有对象,可以使用emplace_back()方法。这个方法需要一个左值引用参数来直接在容器内部构造元素。

你可能感兴趣的:(c++,开发语言,C++11)