这是由于短路机制造成的.
这意味着当已经确定逻辑运算符的结果时,根本不评估表达式的其余部分,包括潜在的副作用.
第一个代码片段的行为如下:
int a = (1 && 0) /* result pending... */ || z++;
第二个:
int a = (1 && 0) /* result determined */;
发生这种情况是因为如果左侧表达式为false,则逻辑AND的值已知为false.
这是由于短路机制造成的.
这意味着当已经确定逻辑运算符的结果时,根本不评估表达式的其余部分,包括潜在的副作用.
第一个代码片段的行为如下:
int a = (1 && 0) /* result pending... */ || z++;
第二个:
int a = (1 && 0) /* result determined */;
发生这种情况是因为如果左侧表达式为false,则逻辑AND的值已知为false.