gpt4 book ai didi

c++ - 逗号运算符没有副作用吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:37 25 4
gpt4 key购买 nike

例如这样的语句:

c += 2, c -= 1

是否总是首先计算 c += 2,并且第二个表达式 c-= 1 中的 c 总是从表达式 c += 2 更新值?

最佳答案

是的,这是由标准保证的,只要那个逗号是一个非重载的逗号运算符。引用 n3290 §5.18:

The comma operator groups left-to-right.

expression:
assignment-expression
expression , assignment-expression

由逗号分隔的一对表达式从左到右求值;左边的表达式是一个被丢弃的- 值表达式(第 5 条)83。与左侧表达式关联的每个值计算和副作用 与正确表达式相关的每个值计算和副作用之前排序。方式 结果的值是右操作数的类型和值;结果属于相同的值类别 作为它的右操作数,如果它的右操作数是一个 glvalue 和一个位域,那么它是一个位域。

以及相应的脚注:

83 However, an invocation of an overloaded comma operator is an ordinary function call; hence, the evaluations of its argument expressions are unsequenced relative to one another (see 1.9).

所以这对非重载的逗号运算符成立。

函数参数之间的 , 不是逗号运算符。这条规则在那里也不适用。

对于C++03,情况类似:

The comma operator groups left-to-right.

expression:
assignment-expression
expression , assignment-expression

一对由逗号分隔的表达式从左到右求值,左边表达式的值为 丢弃。左值到右值 (4.1)、数组到指针 (4.2) 和函数到指针 (4.3) 标准转换 sions 不适用于左侧表达式。 左边表达式的所有副作用 (1.9),除了 临时对象的销毁 (12.2),在正确的表达式求值之前执行。 类型和 结果的值是右操作数的类型和值;如果其右操作数是,则结果是左值。

但限制是相同的:不适用于重载的逗号运算符或函数参数列表。

关于c++ - 逗号运算符没有副作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7784774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com