“左值”和“右值”的命名背后的原因是什么?

2023-11-24

C/C++ 中“左值”和“右值”的命名背后的原因是什么?


标准中提到了这一点:

左值(历史上如此称呼,因为左值可能出现在赋值表达式的左侧)[...]

右值(历史上如此称呼,因为右值可以出现在赋值表达式的右侧)[...]

也就是说,左值是您可以分配给的东西,右值是您可以从中分配的东西。

然而,这逐渐离事实越来越远。无法分配左值的一个简单示例是const多变的。

const int x = 5;
x = 6; // Error

当涉及运算符重载时,您甚至可以让右值出现在赋值的左侧。

我发现将左值视为引用存储在内存中的对象并将右值视为只是一个值(可能已从内存中读取)更有用。这些概念很好地反映了这个想法。一些例子:

  • 左值到右值可以被认为是从内存中的对象读取值。
  • 大多数运算符需要左值到右值的转换,因为它们使用对象的值来计算结果。
  • 操作员的地址(&) 需要一个左值,因为您只能获取内存中某些内容的地址。它不需要获取对象的值来计算其地址。
  • 表演std::move将左值表达式转换为右值表达式可以被认为是欺骗编译器认为存储在内存中的对象实际上只是一个临时值。

然而,这也并不适用于所有情况。这只是一个合理的类比。

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

“左值”和“右值”的命名背后的原因是什么? 的相关文章

  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • .NET 4 的条件编译[重复]

    这个问题在这里已经有答案了 可能的重复 条件编译和框架目标 https stackoverflow com questions 2923210 c sharp conditional compilation and framework ta
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • 检测对背景大小的支持:封面

    什么是检测CSS3支持的保存方法背景尺寸 封面 特别是在 IE 以下测试在 IE 背景大小 to cover div style backgroundSize cover 我在测试时得到的唯一真实结果 if backgroundSize i
  • 是否可以使用椭圆曲线加密技术来加密数据?

    到目前为止我只看到它在数字签名和密钥协商协议中使用 它可以像 RSA 一样用来实际加密数据吗 有这方面的库吗 Edited 我需要类似 RSA 的东西 使用接收者的公钥对数据进行加密 以便稍后他可以使用他的私钥对其进行解密 我知道 ECDH
  • ImageButton:强制方形图标(高度 = WRAP_CONTENT,宽度 = ?)

    在我的水平 LinearLayout 中 我有一个 TextEdit 和一个 ImageButton ImageButton 与 TextEdit 一样高 我希望 ImageButton 的宽度和长度完全相同 目前看来 ImageButto
  • Android proguard 混淆的代码在实际上不应该导致 NullPointerException 的情况下导致了 NullPointerException

    我已经在 Android Marketplace 上分发了一个应用程序 我从一小部分用户 可能是 2 那里收到了错误报告 他们在没有逻辑意义的情况下得到了 NullPointerExceptions 我自己从来无法复制这一点 该代码相对简单
  • 即使事件重新触发后,Flutter BlocListener 也仅执行一次

    我正在实施Reso Coder 干净的架构扑腾中 我按照他的指南将项目分层并使用依赖项注入 在其中一种情况下 我希望出现以下场景 管理员用户登录 在主屏幕上查看数据 对其进行编辑 然后按按钮将数据保存到本地数据库 sqflite 保存数据后
  • 不存在的服务“request_stack”

    我正在编写 Symfony 2 6 应用程序 并且在尝试将 RequestStack 注入服务时遇到了问题 我想要的是能够从我的服务中获取当前请求 但出现以下异常 ServiceNotFoundException The service h
  • 为什么 LISP 中不需要#'(尖引号)符号?

    我正在从 Practical Common Lisp 一书中学习 Lisp 在某一时刻 我应该输入以下代码 1 remove if not evenp 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 我想这里的想法当然是 r
  • 如何在所有子图上方设置一个主标题

    我在用pyplot 我有4个子图 如何在所有子图之上设置一个主标题 title 将其设置在最后一个子图之上 Use pyplot suptitle or Figure suptitle import matplotlib pyplot as
  • Pandas-如果值大于0,则将一列除以另一列?

    我有一个 pandas 数据框 其中包含日期 项目和 2 个值 我想要做的就是输出另一列 如果 B 列大于 0 则输出 A 列 B 列的乘积 如果 B 列等于 0 则输出 0 date item A B C 1 1 2017 a 0 3 0
  • 创建没有 persistence.xml 配置文件的 JPA EntityManager

    有没有办法初始化EntityManager没有定义持久性单元 您能否提供创建实体管理器所需的所有属性 我需要创建EntityManager来自用户在运行时指定的值 更新中persistence xml并且重新编译不是一个选择 任何关于如何做
  • THREE.JS:在网格内部查看几何图形

    当输入几何体 例如球体网格 时 它的行为就像几何体不存在一样 颜色和纹理从外面可见 但是一旦我放大网格 这些属性就消失了 如何使球体网格的颜色和纹理在网格内部可见 mesh material side THREE DoubleSide Or
  • 会话 Bean 的会话状态

    我正在读一本关于 Java EE 6 的书 我遇到了以下部分 无状态 会话 bean 不包含方法之间的对话状态 并且任何 实例可用于任何客户端 有状态 会话bean包含会话状态 必须保留该状态 单个用户的跨方法 对话状态 是什么意思 有人用
  • Linq 中的分层数据 - 选项和性能

    我有一些分层数据 每个条目都有一个 id 和一个 可为空 父条目 id 我想检索树中给定条目下的所有条目 这是在 SQL Server 2005 数据库中 我正在 C 3 5 中使用 LINQ to SQL 查询它 LINQ to SQL
  • 突出显示所有字段的匹配结果

    我希望突出显示匹配的结果 如果我提到字段名称并且它返回突出显示的文本 这对我有用 但是如果我将该字段指定为 all 它不会返回任何值 这对我有用 curl XGET http localhost 9200 my index my type
  • 如何使用 NSCoder 在 swift 中对枚举进行编码?

    背景 我正在尝试使用 NSCoding 协议对字符串样式枚举进行编码 但在与字符串之间转换和返回时遇到错误 我在解码和编码时遇到以下错误 字符串无法转换为 Stage 额外参数 ForKey 在调用中 Code enum Stage Str
  • 克利翁和 CMake。如何添加库(*.so)

    我正在尝试在 Clion IDE 中编写 c c 代码 我需要在我的项目中添加一些共享库 此时 我只想运行主函数 它将添加我的外部库 libAPIenergy so 具有的所有函数 我尝试了该论坛的一些解决方案 但没有一个有帮助 下面我将提
  • 在圆形图像视图中显示时图像被拉伸

    下面是我的 RoundedImageView 类 它扩展了 ImageView public class RoundedImageView extends ImageView public RoundedImageView Context
  • 突出显示 NSToolbarItems

    我想突出显示所选内容NSToolbarItem就像例如在 Adium 中 参见屏幕截图 突出显示http a2 s3 p quickshareit com files screenshot b28b67ba9411513d6 png 有简单
  • 如何将 Firestore 中的地图数组转换为 Dart 地图列表

    我正在尝试使用 Flutter 和 Firestore 构建一个应用程序 但我对必须将数据从 Firestore 实现为 Dart 语言的方式感到困惑 所以问题是我的 Firestore 中有一个地图数组 其中的每个元素该数组代表这样的地图
  • “左值”和“右值”的命名背后的原因是什么?

    C C 中 左值 和 右值 的命名背后的原因是什么 标准中提到了这一点 左值 历史上如此称呼 因为左值可能出现在赋值表达式的左侧 右值 历史上如此称呼 因为右值可以出现在赋值表达式的右侧 也就是说 左值是您可以分配给的东西 右值是您可以从中