带括号顺序的逗号运算符

时间:2018-11-16 22:11:13

标签: c++ operators comma

#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的规则不适用于,并且括号不会影响优先级,我是对还是错?

1 个答案:

答案 0 :(得分:0)

Paranthese不会首先使表达式的一部分执行,它们只是确保在执行表达式的下一部分之前,执行其中的所有操作。由于逗号运算符是从左到右评估的

a, b, c

相同
(a, b), c

从左侧开始,先进行a,然后进行b,最后完成c

a, (b, c)

做同样的事情。我们从a的左边开始,继续到(b, c),它先计算b,然后再计算c