带布尔值的C++后缀运算符优先级和
直到今天,我还以为我明白C++运算符和precedence。我给你以下简单的代码:带布尔值的C++后缀运算符优先级和
int i = 0, j = 0 i++;
j++;
cout << i << ' ' << j << endl;
当然,我们期待i
和j
的输出值分别为1和1。现在如果我们尝试将增量放入一行,会发生什么?
int i = 0, j = 0 i++ && j++;
cout << i << ' ' << j << endl;
我在这里的推理是布尔运算符对输出没有影响。但是我们的产出令人惊讶的是i = 1
和j = 0
?那么这里发生了什么?
更加奇怪的是,通过从后缀增量切换到前缀增量或使用另一个布尔运算符,结果如预期。 I.e:
//Expected i=1, j=1 ++i && ++j;
//Expected i=1, j=1
i++ || j++;
P.S.我知道,正确的使用情况来更新这两个变量在一行是这样的:
i++, j++;
但是好奇心得到了最好的我,现在我不知道为什么使用布尔AND
运营商拥有令人吃惊的结果。
回答:
i++
增量i
但表达式的结果是0
(增量是副作用)。因此表达式i++ && j++
从不评估&&
运算符的右侧。
预增值运算符++i
的结果是递增值。这就是为什么++i && ++j
也增加j
。
请注意,没有一个与优先级有关。最重要的是要准确理解前后增量运算符之间的区别。另一个因素是&&
运营商被定义为“短路” - 它不能评估表达式的右侧如果左侧评估为0.
以上是 带布尔值的C++后缀运算符优先级和 的全部内容, 来源链接: utcz.com/qa/258874.html