首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:用户定义的逗号操作符的计算顺序是什么?

C++:用户定义的逗号操作符的计算顺序是什么?
EN

Stack Overflow用户
提问于 2022-01-22 11:40:59
回答 1查看 110关注 0票数 6

我当时正在阅读Nicolai的"C++ 17完成指南“,发现了以下表达式:

代码语言:javascript
复制
foo(arg1), (foo(arg2), foo(arg3));

作者声称,内建逗号运算符的计算顺序将从左到右,但可以通过重载它们来改变。然而,我看到了cp偏好(订单)上的“评价顺序”文章,并看到了以下声明:

  1. 内建逗号运算符的第一个(左)参数的每一个值计算和副作用都是在每个值计算和第二个(右)参数的副作用之前进行排序的。

  1. 当使用运算符表示法时,每个重载的操作符都遵守内置操作符的排序规则。

因此,根据语句16,appears似乎声称重载的逗号操作符与其内建的逗号操作符具有相同的计算顺序。那么,作者所说的“通过重载逗号操作符,你可以改变它的计算顺序”到底是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-22 12:13:47

评估顺序在C++17之前是一团糟,C++17对评估顺序进行了全面的更改,这很可能是作者的一个错误。

在C++17之前,重载运算符是完整的语法糖。使用任何二进制运算符@a@b 是等价的

代码语言:javascript
复制
operator@(a, b)
a.operator@(b)

这取决于它是成员函数还是自由函数。也就是说,ab是相对于彼此没有顺序的。

在C++17中,a@b 与内置运算符相同。的评价顺序。对于逗号操作符,ab之前进行排序。在函数调用版本中,ab是不确定的顺序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70812439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档