c ++中的逗号运算符

Gau*_*mar 5 c++

int main() {
   int x = 6;
   x = x+2, ++x, x-4, ++x, x+5;
   std::cout << x;
}

// Output: 10
Run Code Online (Sandbox Code Playgroud)
int main() {
   int x = 6;
   x = (x+2, ++x, x-4, ++x, x+5);
   std::cout << x;
}

// Output: 13
Run Code Online (Sandbox Code Playgroud)

请解释.

Arm*_*yan 15

由于,具有较低的优先级=.实际上,,所有运营商的优先级最低.

第一种情况:

x=x+2,++x,x-4,++x,x+5;
Run Code Online (Sandbox Code Playgroud)

这相当于

(x=x+2),(++x),(x-4),(++x),(x+5);
Run Code Online (Sandbox Code Playgroud)

因此,x变为6 + 2 = 8,然后它递增并变为9.下一个表达式是无操作,即x-4计算并丢弃值,然后再次递增,现在x是10,最后是另一个无操作.x是10.

第二种情况:

x=(x+2,++x,x-4,++x,x+5);
Run Code Online (Sandbox Code Playgroud)

这相当于

x=((x+2),(++x),(x-4),(++x),(x+5));
Run Code Online (Sandbox Code Playgroud)

x+2计算,然后x递增并变为7,然后x - 4计算,然后x再次递增并变为8,最后x+5计算为13.该操作数,即最右边的操作数,作为整个逗号表达式的结果.此值已分配给x.
x是13.

希望很清楚.

而且,正如其中一条评论所暗示的那样 -

永远不要写这样的代码

  • @Tomalak Geret'kal不,因为逗号运算符引入了一个序列点.我仍然*永远不会*写这样的代码. (3认同)