是C / C ++或编译器实现中的短路评估语言功能

问题描述 投票:0回答:1

我想知道是否短路评估

long param = 0;
if ( functAWithSideEffects(&param) || funcBWithSideEffects(&param) )

可以依靠。例如,如果funcAWithSideEffects返回true,则编译器评估funcBWithSideEffects吗?短路评估是语言功能还是编译器实现细节?

gcc visual-c++ g++
1个回答
1
投票

是。可以依靠。

C standard保证它(强调我):

4与按位|运算符,||运营商保证从左到右的评估;如果对第二个操作数求值,则存在第一和第二次评估之间的顺序点操作数。 如果第一个操作数比较不等于0,则第二个未评估操作数。

尽管C ++在几种方面与C有所不同,但我99.99%的人确定短路评估不是其中之一。

&&可以找到类似的保证。

© www.soinside.com 2019 - 2024. All rights reserved.