假设我有以下代码:
if (a&&b)
{
...
}
第一个问题,谁决定在这种情况下使用短路评估?编译器还是C标准?
第二个问题,首先评估哪一个? a
或b
。序列由谁决定,是否有办法改变我的代码中的序列?
答案 0 :(得分:7)
标准要求进行短路评估。
首先是a
。你不能在程序中改变它。
参考: 6.5.13逻辑AND运算符,第4段:
与按位二进制
&
运算符不同,&&
运算符可保证从左到右的评估;如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点。如果第一个操作数比较等于0,则不评估第二个操作数。