c++ - 为什么 “k” 语句中的 “m =++i ||++j &&++k” 没有递增?

标签 c++ c expression logical-operators

<分区>

第一部分:

i=j=k=1;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);

输出:2, 2, 1, 1

第一部分简单易懂,这里++i && ++j首先执行,这是真的(并且增加 i 和 j 的值)所以不需要检查 OR 操作的下一部分(不需要增加 k 的值)。

第二部分:

i=j=k=1;
m = ++i || ++j && ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);

输出:2, 1, 1, 1

第二部分容易理解,这里++i || ++j先执行,其中++i为真(并且增加了 i 的值,因为 OR 操作所以不需要增加 j 的值)。接下来在这里执行AND操作应该是k=2的增量值(但仍然是 k 打印 1 的值)。

亲爱的利他主义者,请解释一下第二部分发生了什么。

最佳答案

&& 在 C/C++ 中比 || 具有更高的优先级,将您的代码呈现为:

m = ++i || (++j && ++k);

因为 ++i 已经为真,所以第二部分没有执行 ( short-circuit evaluation )。

参见 http://de.cppreference.com/w/cpp/language/operator_precedence运算符优先级。

关于c++ - 为什么 “k” 语句中的 “m =++i ||++j &&++k” 没有递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38774976/

相关文章:

c++ - QT从主窗口更新工作线程的变量

c++ - 这是糟糕的风格吗?

c - ACM 丢球

c# - IQueryable 转换

regex - Oracle 正则表达式中的高代理检测

Ruby 部分单词匹配

c++ - 跳过未使用的虚函数

c++ - enable_if 只有 C++11 吗?

c - 为什么这不打印随机数?

c - bind() 在 tcp 客户端中调用