#include<iostream>
#include<cstdlib>
using namespace std;
void func(int &x, int a) {
x = abs(x-a);
}
int main()
{
int x = 0;
(func(x, 1), func(x, 2)), func(x, 3);
cout << x << endl;
int y = 0;
func(y, 1), (func(y, 2), func(y, 3));
cout << x << endl;
}
输出为
2
2
基本上,我的问题是关于a, (b, c)
和(a, b), c
的执行顺序。看起来两者的顺序与a, b, c
相同,并且一个接一个地执行。
现在,以,
为运算符,在a, (b, c)
中,为什么不首先执行(b, c)
并输出0
作为最终结果?
我的假设是在计算a @(b @ c)之前先计算b @ c的规则不适用于,
并且括号不会影响优先级,我是对还是错?
答案 0 :(得分:0)
Paranthese不会首先使表达式的一部分执行,它们只是确保在执行表达式的下一部分之前,执行其中的所有操作。由于逗号运算符是从左到右评估的
a, b, c
与
相同(a, b), c
从左侧开始,先进行a
,然后进行b
,最后完成c
。
a, (b, c)
做同样的事情。我们从a
的左边开始,继续到(b, c)
,它先计算b
,然后再计算c
。