gpt4 book ai didi

c++ - 什么是右值、左值、x值、左值和右值?

转载 作者:行者123 更新时间:2023-12-03 12:52:07 28 4
gpt4 key购买 nike

在 C++03 中,表达式可以是右值,也可以是左值

在 C++11 中,表达式可以是:

  1. 右值
  2. 左值
  3. x值
  4. gl值
  5. 右值

两个类别变成了五个类别。

  • 这些新的表达类别是什么?
  • 这些新类别与现有的右值和左值类别有何关系?
  • C++0x 中的右值和左值类别与 C++03 中的相同吗?
  • 为什么需要这些新类别?是WG21众神只是想迷惑我们凡人?

最佳答案

我想这个文档可以作为一个不那么简短的介绍:n3055

整个屠杀是从移动语义开始的。一旦我们有了可以移动而不可以复制的表达式,突然之间,易于掌握的规则就需要区分可以移动的表达式以及向哪个方向移动。

根据我对草案的猜测,r/l 值的区别保持不变,只是在移动事物变得困惑的情况下。

他们需要吗?如果我们想放弃新功能,则可能不会。但为了实现更好的优化,我们可能应该拥抱它们。

引用n3055 :

  • 左值(所谓的,历史上,因为左值可能出现在作业的左侧表达式)指定一个函数或一个东西。 [示例:如果 E 是指针类型的表达式,然后 *E是一个左值表达式,指的是E 的对象或函数点。作为另一个例子,调用函数的结果返回类型是左值引用左值。]
  • xvalue(一个“即将到期”值)也指物体,通常接近其末端生命周期(以便其资源可以例如,被移动)。 x 值是某些类型的结果涉及右值的表达式引用。 [示例:调用函数的结果返回类型是右值引用x 值。]
  • glvalue(“广义”左值)是一个左值xvalue
  • 右值(所谓的,从历史上看,因为右值可以出现在赋值表达式)是一个 xvalue,临时对象或其子对象,或者是一个值不与对象关联。
  • Aprvalue(“纯”右值)是一个右值这不是 x 值。 [示例:调用函数的结果返回类型不是引用而是a右值]

所讨论的文档对于这个问题来说是一个很好的引用,因为它显示了由于引入新术语而导致的标准的确切变化。

关于c++ - 什么是右值、左值、x值、左值和右值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61899123/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com