C++中的输出和误解
output and misunderstanding in C++
我想知道为什么输出是 (1),以及为什么在对变量 b 的第二次赋值中,表达式 (i+=2) 没有被计算。最后这个程序是怎么一步步执行的呢?
我还是初学者。
`
int i = 0;
bool t = true;
bool f = false,
b;
b = (t && ((i++) == 0));
b = (f && (i += 2 > 0));
cout << i << endl;
`
因为 &&
运算符 short-circuits 和 f
是 false
,1 += 2
未被计算。
如果 &&
的 个操作数是 true
,则整个表达式只能是 true
,因此无需计算 (i += 2 > 0)
判断整个表达式的值为false
。鉴于在这种情况下 不需要 计算第二个操作数,许多编程语言保证不会,包括 C 和 C++。
在布尔表达式中使用带有 side-effects 的操作数时要小心。
我想知道为什么输出是 (1),以及为什么在对变量 b 的第二次赋值中,表达式 (i+=2) 没有被计算。最后这个程序是怎么一步步执行的呢? 我还是初学者。
`
int i = 0;
bool t = true;
bool f = false,
b;
b = (t && ((i++) == 0));
b = (f && (i += 2 > 0));
cout << i << endl;
`
因为 &&
运算符 short-circuits 和 f
是 false
,1 += 2
未被计算。
如果 &&
的 个操作数是 true
,则整个表达式只能是 true
,因此无需计算 (i += 2 > 0)
判断整个表达式的值为false
。鉴于在这种情况下 不需要 计算第二个操作数,许多编程语言保证不会,包括 C 和 C++。
在布尔表达式中使用带有 side-effects 的操作数时要小心。