我想知道是否短路评估
long param = 0;
if ( functAWithSideEffects(¶m) || funcBWithSideEffects(¶m) )
可以依靠。例如,如果funcAWithSideEffects返回true,则编译器评估funcBWithSideEffects吗?短路评估是语言功能还是编译器实现细节?
是。可以依靠。
C standard保证它(强调我):
4与按位|运算符,||运营商保证从左到右的评估;如果对第二个操作数求值,则存在第一和第二次评估之间的顺序点操作数。 如果第一个操作数比较不等于0,则第二个未评估操作数。
尽管C ++在几种方面与C有所不同,但我99.99%的人确定短路评估不是其中之一。
&&
可以找到类似的保证。