带布尔值的C++后缀运算符优先级和

直到今天,我还以为我明白C++运算符和precedence。我给你以下简单的代码:带布尔值的C++后缀运算符优先级和

int i = 0, j = 0 

i++;

j++;

cout << i << ' ' << j << endl;

当然,我们期待ij的输出值分别为1和1。现在如果我们尝试将增量放入一行,会发生什么?

int i = 0, j = 0 

i++ && j++;

cout << i << ' ' << j << endl;

我在这里的推理是布尔运算符对输出没有影响。但是我们的产出令人惊讶的是i = 1j = 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

回到顶部