参数顺序评估

2024-02-09

在标准的早期版本 (C++03) 中,函数调用的参数求值顺序未指定。

标准的后续版本(C++11 或 C++14)是否对此进行了更改?
即我们是否可以依赖特定的顺序(从左到右)。


不,这没有改变,但最近有一个建议来改变这一点:N4228:细化表达式评估顺序 惯用的C++ http://open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4228.pdf,这是今年 10 月发布的预厄巴纳邮件 http://isocpp.org/blog/2014/10/pre-urbana简介说(强调我的前进):

表达式求值顺序是一个反复出现的讨论主题 C++ 社区。简而言之,给定一个表达式,例如 f(a, b, c), 子表达式 f 、 a 、 b 、 c 的求值顺序 标准未指定。如果其中任何两个 子表达式碰巧修改同一个对象而无需干预 序列点,程序的行为是未定义的。为了 例如,表达式 f(i++, i),其中 i 是整型变量 导致未定义的行为

它建议:

我们建议修改 C++ 评估规则以支持数十年历史 惯用的结构和编程实践。一个简单的解决方案 要求每个表达式都有一个明确定义的 评价顺序。这一建议传统上遭到了反对 很多原因。相反,这提出了更有针对性的修复

  • 后缀表达式是从左到右计算的。这包括 函数调用和成员段表达式.
  • 赋值表达式是从右到左计算的。这包括复合作业。
  • 移位运算符的操作数从左到右计算

Update

赫伯·萨特最近寻找社区的一些反馈,了解我们期望从以下代码中获得什么结果:

std::vector<int> v = { 0, 0 };
int i = 0;
v[i++] = i++;
std::cout << v[0] << v[1] << endl;

这似乎表明委员会正在认真考虑评估顺序这一主题,但正如我们从讨论中看到的那样,这是有争议的。

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

参数顺序评估 的相关文章

随机推荐

  • python-polars使用字典按列值将数据帧分割成许多dfs

    我想使用字典通过唯一列值将单个 df 拆分为多个 df 下面的代码展示了如何使用 pandas 来完成此操作 我怎样才能在极地中执行以下操作 import pandas as pd Favorite color of 10 people d
  • 如何在 Subversion 服务器中搜索文件?

    有没有办法在颠覆存储库中搜索文件 类似于 Unix 的东西find命令 用它我可以找到存储库中文件的位置 我知道有svn list 但这给了我一个目录中所有文件的列表 我想找到文件所在的目录 您可以在服务器上使用以下命令和 grep svn
  • 无法在两个账户之间使用 Amazon S3 跨区域复制

    我希望有人可以帮助我处理 Amazon S3 跨区域复制查询 我有两个 Amazon AWS 账户 每个账户在不同区域都有一个存储桶 我想将数据从一个存储桶复制到另一个存储桶 据我了解 这应该是一个简单的创建过程 然而 我真的很挣扎 我不知
  • 浮点数如何存储在内存中[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 由于计算机只能理解下面的 0 和 1 像 12 1234 这样的浮点数如何在内存中表示为一组 0 和 1 它是否通过相应的 ASCII
  • C#中通过串口访问蓝牙数据

    所以我在Unity3D中工作 用C 编程 我听说可以通过串行端口从蓝牙适配器读取数据 我尝试使用此方法将多个蓝牙 USB 适配器连接到我的电脑上 但是 当我尝试打开串行端口时 收到一条错误消息 指出端口不存在 我只包含与问题相关的代码 但
  • Rails 分页与 Kaminari 和 has_many :through 关系

    我有三个相关模型 一个用户has many photos and belongs to dorm 一个宿舍has many users and has many photos through gt users 和一个照片类belongs t
  • 动态格式化字符串[重复]

    这个问题在这里已经有答案了 如果我想让我的格式化字符串动态可调 我可以更改以下代码 print 20s 20s Python Very Good to width 20 print str width s str width s Pytho
  • 即使安装了 gem,Ruby 也找不到所需的库

    我花了几天时间尝试安装 ruby 1 9 2 并让它与 gems 一起工作 我最终放弃了我的 Mac OSX 10 6 机器 下面是我的 Ubuntu 机器上的当前状态 任何建议将不胜感激 ruby test rb
  • 如何在 AngularJS 中观察 $stateProvider 的状态变化?

    我知道我可以运行 scope watch someItem function 但我想不出一种方法来观察变化 state current name在我的应用程序中 它在文档中 https github com angular ui ui ro
  • 调用 mysqli_error() 时发出警告[重复]

    这个问题在这里已经有答案了 可能的重复 PHP警告有帮助吗 https stackoverflow com questions 1654958 php warning help 我试图连接数据库中的三个表以显示用户选择的类别 但出现以下错误
  • HTTP 方法:DELETE 与 POST

    假设我有一个名为 Session 的资源 客户端将调用 PUT 来创建并开始新会话 当客户端完成会话后 它不应该再被访问 但由于历史 责任原因应该持续存在 要结束会话 发出 DELETE 请求 这在语义上看起来更接近预期效果 是否更合适 或
  • 分组条形图中的堆叠条形

    我有下面的图表 test lt expand grid cat LETTERS 1 5 cond c F T year 2001 2005 test value lt floor rnorm nrow test 100 test value
  • 是否可以获取指向 Windows 7 中默认音频端点设备缓冲区的指针?

    此处使用 Win32 API 我一直在 MSDN 文档中搜索 Windows Vista 中的核心音频服务 但没有找到保护默认音频缓冲区的方法 我的目标是建立正在播放的音频的实时频谱图数据 有什么方法可以在通过扬声器播放音频流之前访问它吗
  • SCNetworkReachability 是否尊重 HTTP 代理设置?

    恐怕这个问题的答案是否定的 但我希望有人能够提供明确的答案 因为当前的 iOS SDK 文档中没有记录该答案 我们看到 NSURLConnection 能够连接到的情况https mysite com https mysite com通过
  • 显示日期处于财政年度的哪个季度

    我正在尝试构建一个查询 该查询将映射两列 一列是表中的日期 第二列是别名 以显示该日期属于哪个季度和财政年度 不幸的是 我没有足够的 SQL 知识 不知道从哪里开始 我知道我会结合使用以下方法来做到这一点getdate and datead
  • 将 chrono:: 毫秒转换为 uint64_t?

    假设我有可变的毫秒数x chrono milliseconds x std chrono duration cast
  • BLE Swift 写入特性

    我正在努力让我的 TI 传感器标签温度传感器发出通知 根据http processors wiki ti com images a a8 BLE SensorTag GATT Server pdf http processors wiki
  • 自定义 spring-initializr 的工作方式?

    作为一家企业 我们希望在我们的 PCF 实例上内部托管initializr 我可以做到 我还可以修改 application yml 以默认某些选择 我通过简单地创建自己的 spring boot 应用程序来做到这一点 该应用程序使用 io
  • R 正在使用 mingw_32 编译 64 位架构的包

    定期 我想每当我更新 R 我在 64 位 Windows 机器上从源代码安装软件包时都会遇到问题 今天我尝试使用安装包devtools install github 在我的笔记本电脑上安装进行得很好 但在我的台式机上安装失败 可以将软件包安
  • 参数顺序评估

    在标准的早期版本 C 03 中 函数调用的参数求值顺序未指定 标准的后续版本 C 11 或 C 14 是否对此进行了更改 即我们是否可以依赖特定的顺序 从左到右 不 这没有改变 但最近有一个建议来改变这一点 N4228 细化表达式评估顺序