我想知道是否短路评估
long param = 0;
if ( functAWithSideEffects(¶m) || funcBWithSideEffects(¶m) )
可以依靠。例如,如果 funcAWithSideEffects 返回 true,编译器会评估 funcBWithSideEffects 吗?短路评估是语言特性还是编译器实现细节?
我想知道是否短路评估
long param = 0;
if ( functAWithSideEffects(¶m) || funcBWithSideEffects(¶m) )
可以依靠。例如,如果 funcAWithSideEffects 返回 true,编译器会评估 funcBWithSideEffects 吗?短路评估是语言特性还是编译器实现细节?
是的。它可以依靠。
C标准保证它(强调我的):
4 不同于按位 | 运算符,|| 运算符保证从左到右的评估;如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点。如果第一个操作数比较不等于 0,则不计算第二个操作数。
虽然 C++ 在几个方面与 C 不同,但我 99.99% 确信短路评估不是其中之一。
可以找到类似的保证&&。