左值/右值、引用、复制与移动语义

💡 原文英文,约300词,阅读约需1分钟。
📝

内容提要

本文讨论了C++中的值类别,包括左值(lvalue)、右值(rvalue)、glvalue、prvalue和xvalue。左值表示可以持有值的内存位置,而右值则不具备此特性。文章强调了这些值在赋值操作中的定义和行为。

🎯

关键要点

  • 本文讨论了C++中的值类别,包括左值、右值、glvalue、prvalue和xvalue。
  • 左值表示可以持有值的内存位置,而右值则不具备此特性。
  • 文章强调了这些值在赋值操作中的定义和行为。
  • 左值是一个表达式,可能指向一个对象,且在评估时如果不指向对象则行为未定义。
  • C标准并未明确规定右值的定义。
  • 数组(没有使用[])标识内存位置但不是左值。
  • 所有左值在赋值操作的右侧都是有效的,但反之则不然。
  • C++中的值类别包括glvalue、prvalue、xvalue、lvalue和rvalue。

延伸问答

什么是左值和右值的定义?

左值是可以持有值的内存位置,而右值则不具备此特性。

C++中有哪些值类别?

C++中的值类别包括左值(lvalue)、右值(rvalue)、glvalue、prvalue和xvalue。

左值在赋值操作中有什么特点?

所有左值在赋值操作的右侧都是有效的,但反之则不然。

C标准对右值的定义有什么不明确之处?

C标准并未明确规定右值的定义。

数组在值类别中是左值吗?

数组(没有使用[])标识内存位置但不是左值。

左值是否必须是可变的?

左值不必是可变的,例如const类型的左值也是有效的。

➡️

继续阅读