【发布时间】:2016-06-09 20:58:12
【问题描述】:
int x = 5,y = 10;
bool boolean = 0;
int k = (boolean ? ++x, ++y : --x, --y);
cout<<k;
boolean 为 0 时输出 9,但为 1 时输出 10。我知道这是由于优先级而发生的,但无法准确弄清楚它是如何发生的,请帮助我理解这一点。
注意:我知道如果我使用括号,或者更好地编写干净的代码,我可以获得预期的输出,我只是用它来了解编译器如何根据优先级评估这些表达式。
【问题讨论】:
-
阅读逗号运算符和前缀递增递减。
-
你希望得到什么输出?
-
请不要写这样的代码。
-
这就是为什么你应该编写可读代码
-
当您想在
if和else的每个案例中执行多项操作时,我强烈建议您使用完整的if-else块。此外,我发现在处理复杂表达式时添加自己的括号有助于提高可读性,即使我知道运算符优先级可以满足我的要求。
标签: c++ ternary-operator operator-precedence