什么是右值、左值、x值、左值和右值?

2024-01-05

在 C++03 中,表达式可以是rvalue or an lvalue.

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

  1. rvalue
  2. lvalue
  3. xvalue
  4. glvalue
  5. prvalue

两类变成了五类。

  • 这些新的表达类别是什么?
  • 这些新类别与现有的右值和左值类别有何关系?
  • C++0x 中的右值和左值类别与 C++03 中的相同吗?
  • 为什么需要这些新类别?是WG21 http://www.open-std.org/jtc1/sc22/wg21/诸神只是想迷惑我们凡人吗?

我想这个文档可以作为一个不那么简短的介绍:n3055 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3055.pdf

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

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

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

Quoting n3055 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3055.pdf:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是右值、左值、x值、左值和右值? 的相关文章

  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a

随机推荐