后缀(前缀)增量、L 值和 R 值(在 C 和 C++ 中)

2023-12-02

我刚刚了解到以下事实:

  • 前缀增量 (++var_name) 的结果是 C 中的 R 值(至少,我是 确保它不是 C 中的 L 值),但它是 C++ 中的 L 值。

  • 后缀增量 (var_name++) 的结果是 C 中的 R 值(至少,我是 确保它不是 C) 中的 L 值。这在 C++ 中也是如此(它说结果 是纯右值)。

我在 VS2010(.cpp 和 .c)和 Ubuntu(gcc 和 g++)中检查了这些。

在 C++ 标准第 109 页(5.3.2)中http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf, 这个已经写完了

前缀++的操作数通过加1来修改,或者如果它是bool则设置为true(不推荐使用这种用法)。这 操作数应是可修改的左值。操作数的类型应为算术类型或指向 完全定义的对象类型。结果是更新后的操作数;它是一个左值, and...

并在第 101 页中,(5.2.6)

后缀++表达式的值是其操作数的值。 ...结果是 纯右值。结果的类型是操作数类型的 cv 未限定版本。另见 5.7 和 5.17。

(不过我不知道 R 值和纯右值之间的区别)。

对于C标准http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf, prefix ++在6.5.3.1中描述,postfix在6.5.2.4中描述,但是从描述中,我无法得到明确的答案。

我想知道为什么它们是R值或L值。我只知道

We can assign a value to a (modifiable) L-value, for example, a variable name. R-value is a value of an expression.

但我不知道为什么 postfix ++ 在 C 和 C++ 中不是 L 值,以及为什么 prefix ++ 在 C 中不是 L 值。(我看到类似“postfix ++...存储...在临时地址中,然后...”,但我仍然不明白)。

还有一个问题是为什么前缀++在C和C++中不同?将 prefix ++ 设为 L 值(在 C++ 中)有很多优点吗?如果是这样,为什么 C 不改变这一点? (除了向后兼容性之外的其他原因,或者至少为什么更改它会导致很多问题)。


C 和 C++ 是不同的语言。 C++ 有运算符重载,而 C 没有。这++运算符,无论是前缀还是后缀,都是可以在 C++ 中重载的运算符。 C++也有引用,而C没有。

In C, ++i and i++两者都产生一个不是值lvalue。这是可取的,否则您可能会因尝试修改相同序列点边界内的相同标量而与未定义的行为发生冲突。

深思:在 C 语言中,逗号运算符也会产生一个不是左值的值,因此要“删除”低价值, 你可以做:

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

后缀(前缀)增量、L 值和 R 值(在 C 和 C++ 中) 的相关文章

  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 如何让 javafx 类进入运行时?

    我愿意第一次尝试javafx 我去了Oracle上javafx网站发现javafx现在自带了JDK 7u25 我更新了我的 java 版本 但我不确定我在寻找什么 每当我尝试导入和使用 javafx 类时 都会出现 找不到符号 错误 我在
  • 是否可以在不同线程上使用 std::deque::push_back() 和 std::deque::front()/std::deque::pop_front() 而不同步? [复制]

    这个问题在这里已经有答案了 我有一个生产者 消费者的情况 只有一个生产者和一个消费者 共享一个公共的 std deque 让我写一些代码 deque
  • 无法使用参数调用 Word VBA 宏

    我有一个 VB6 应用程序 需要调用 Word 2010 VBA 例程并提供字符串参数 VBA 例程位于通过打开的文档启用的插件中 根据MSDN参考 http msdn microsoft com en us library ff83893
  • 从 JavaScript 调用 JAX-WS Web 服务时的空参数

    我有一个 JAX WS Web 服务 当从任何客户端 即 Java destkop 应用程序 调用但不能从 JavaScript 调用时 该服务工作正常 我的 WS 界面如下所示 WebService public interface Li
  • 将光标设置在 EditText 上的右侧,并提示重力居中

    这可能吗 有任何 EditText 属性可以这样做吗 Thanks 您可以使用 android ellipsize end android gravity center 当你声明 EditText 时在你的 xml 中 第一行是将光标移动到
  • 自跟踪实体和延迟加载

    有没有办法在上下文打开时使用延迟加载和自我跟踪实体 会有什么问题吗 我需要考虑什么 非常感谢您的提前答复 STE 根本不支持延迟加载 因为延迟加载需要在实体上创建动态代理 但 STE 在设计上并未代理 检查摘要中的附加注释 or MSDN问
  • 在python中向时间序列图添加水平限制线

    我想为温度时间序列图添加水平上限和下限线 假设上限线为 30 下限线为 10 df3 plot x Date y Temp PM Temp AM figsize 20 8 我认为这个解决方案可以帮助你 import matplotlib p
  • Joomla URL:一篇文章本身没有漂亮的 URL?

    我是 Joomla 1 5 的新手 我试图澄清一些有关 Joomla 处理 URL 的方式 我已经激活了他们所说的 搜索引擎友好的网址 但似乎页面 或 文章 只有在我从菜单链接到它时才会获得这样的 URL 漂亮的 无参数 URL 真的只在我
  • JQuery 滑块替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在使用 JQuerySlider用作双面滑块的控件 这是一个很棒的 UI 控件 但我正在寻找一个不那么 胖 的替代方案 现在 为了让我使用滑块控件 我必须包括 jQuery核心
  • 'virtualenv' 'pip install sqlalchemy' 但看不到 'pip list'

    我学会了安装python的虚拟环境 看来我对一些基本的点子常识不太熟悉 That is 在虚拟环境中 virtualenv test 然后我有一个名为 test 的虚拟环境 然后我通过激活它 source test bin activate
  • 这个哈希对于安全性有优势吗?

    有什么好处吗 sha1 sha1 sha1 password salt 基本上有多个 sha1 与只有一个 sha1 sha1 password salt 我再说一遍 不要DO NOT尝试通过对哈希值进行 特殊 操作来使密码哈希值更安全 F
  • 使用 auto 访问类的私有结构

    我发现下一个奇怪的代码编译并运行 在 VS 2019 上 include
  • 什么是条件同步?

    有人可以向我解释条件同步吗 一个例子 最好是 C 的 也将不胜感激 听起来你的教授正在谈论线程 线程使计算机程序能够一次执行多件事情 在线程已经运行的情况下启动新线程的行为被计算机程序员称为 启动线程 线程可以共享相同的内存空间 条件同步
  • 0xC0000005:读取位置 0x00000008 时发生访问冲突

    我已经为此苦苦挣扎了一段时间 想知道是否有人可以提供帮助 我正在尝试使用 C 和 SDL1 3 制作粒子样本 到目前为止我已经取得了巨大的成功 程序编译并打开屏幕 但没有任何反应 当我运行调试器时 我收到此错误 SDL 1 3 Space
  • 为每个用户选择每天最高的 3 个分数

    我有一个像这样的 MYSQL 表 id userid score datestamp 1 1 5 2012 12 06 03 55 16 2 2 0 5 2012 12 06 04 25 21 3 1 7 2012 12 06 04 35
  • Windows 堆栈和堆地址范围

    到目前为止 我在使用 Linux 时 堆栈地址非常高 而堆地址非常低 通过使用 C 程序打印堆和堆栈地址可以看出 我对 Win32 进程内存布局有一个问题 MWSDN说堆栈地址高于堆地址 但从我在实践中看到的情况来看 堆栈地址低于堆地址 所
  • 关闭 MySQL 连接 (PHP)

    我编写了一个类来创建与 MySQL 的自动连接并创建查询 它看起来是这样的 include constants php class MySQLDB var connection function construct this gt conn
  • openpty 之后的 ncurses newterm

    我正在尝试弄清楚如何执行以下操作 创建一个新的伪终端 打开在 从属 伪终端内运行的 ncurses 屏幕 fork A 将 I O 从程序运行的终端 bash 转发到新的 从属 终端或 B 退出 让 ncurses 程序在新 pty 中运行
  • 从 R 中未知密度的分位数生成随机样本[重复]

    这个问题在这里已经有答案了 如何从未知密度的分位数生成随机样本数据f x for x之间0 and 4 in R f function x x 1 2 exp x 3 3 2 x 2 2 x 如果我理解正确的话 你想生成具有密度函数由下式给
  • 后缀(前缀)增量、L 值和 R 值(在 C 和 C++ 中)

    我刚刚了解到以下事实 前缀增量 var name 的结果是 C 中的 R 值 至少 我是 确保它不是 C 中的 L 值 但它是 C 中的 L 值 后缀增量 var name 的结果是 C 中的 R 值 至少 我是 确保它不是 C 中的 L