我一直在思考一些初学者的错误,最后我遇到了if
语句中的错误。我将代码扩展为:
int i = 0;
if (i = 1 && i == 0) {
std::cout << i;
}
我已经看到if
语句返回true,并且它将cout
的i
设置为1
。如果在If语句中为i
分配了1
,为什么i == 0
返回true
发布于 2019-05-23 04:44:13
这与operator precedence有关。
if (i = 1 && i == 0)
不是
if ((i = 1) && (i == 0))
因为&&
和==
都比=
具有更高的优先级。它真正起作用的是
if (i = (1 && (i == 0)))
它将1 && (i == 0)
的结果赋值给i
。因此,如果i
从0
开始,则i == 0
为true
,因此1 && true
为true
(或1
),然后将i
设置为1
。然后,由于1
为true,您可以输入if块并打印分配给i
的值。
发布于 2019-05-23 04:45:11
假设你的代码看起来像这样:
#include <iostream>
using namespace std;
int main() {
int i = 0;
if (i = 1 && i == 0) {
cout << i;
}
}
然后是这个:
if (i = 1 && i == 0) {
计算结果为
if (i = (1 && i == 0)) {
因此,i
被设置为1
。
发布于 2019-05-29 03:48:57
它与解析从右到左的规则有关。例如y= x+5。
所有子表达式都按重要性加权。从右到左计算两个同等重要的表达式。首先执行&& expression部分,然后是LHS。
对我来说很有意义。
https://stackoverflow.com/questions/56264674
复制相似问题