首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++中的逗号运算符

c++中的逗号运算符
EN

Stack Overflow用户
提问于 2011-09-14 17:35:49
回答 1查看 145关注 0票数 5
代码语言:javascript
复制
int main() {
   int x = 6;
   x = x+2, ++x, x-4, ++x, x+5;
   std::cout << x;
}

// Output: 10
代码语言:javascript
复制
int main() {
   int x = 6;
   x = (x+2, ++x, x-4, ++x, x+5);
   std::cout << x;
}

// Output: 13

请解释一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-14 17:37:02

因为,低优先级而不是=。事实上,,是所有运算符中优先级最低的。

第一例:

代码语言:javascript
复制
x=x+2,++x,x-4,++x,x+5;

这相当于

代码语言:javascript
复制
(x=x+2),(++x),(x-4),(++x),(x+5);

所以,x变成6+2 = 8,然后递增,变成9。下一个表达式是now,即计算和丢弃x-4值,然后再增加,现在x是10,最后是另一个now。x为10

第二例:

代码语言:javascript
复制
x=(x+2,++x,x-4,++x,x+5);

这相当于

代码语言:javascript
复制
x=((x+2),(++x),(x-4),(++x),(x+5));

计算x+2,然后x递增成为7,然后计算x - 4x再次递增,变为8,最后计算出x+5,即13。这个操作数是最右边的,是整个逗号表达式的结果。此值被赋值给x

x为13.

希望一切都清楚。

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

永远不要写这样的代码

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

https://stackoverflow.com/questions/7420547

复制
相关文章

相似问题

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