-5 c c++ compiler-construction
main() { int k = 5; if(++k <5 && k++/5 || ++k<=8); // how to compiler compile this statement print f("%d",k); }
//这里的答案是7但是为什么?
Pau*_*l R 6
++k < 5求值为false(6 <5 = false),因此&&不评估运算符的RHS (因为已知结果为假).++k <= 8然后评估(7 <= 8 =真),因此完整表达式的结果为真,并且k已经递增两次,使其最终值为7.
++k < 5
&&
++k <= 8
k
注意,&&并且||是短路布尔运算符 - 如果表达式的结果可以由左手参数确定,则不评估右手参数.
||
另请注意,与大多数运算符不同,短路运算符定义表达式中的序列点,这使得在上面的示例k中在同一表达式中多次修改是合法的(通常,这不允许在没有插入序列点的情况下导致未定义行为).
归档时间:
12 年,5 月 前
查看次数:
205 次
最近记录: