ANSI标准是否要求逻辑运算符以C或C++短路?
我很困惑,因为我回想起K&R的书,说您的代码不应该依赖这些操作的短路,因为它们可能不是。有人可以指出逻辑运算符在标准中总是短路的地方吗?我对C++最为感兴趣,对于C的回答也很好。
我还记得阅读(不记得在哪里)未严格定义评估顺序,因此您的代码不应依赖或假定表达式中的函数将以特定顺序执行:在语句末尾,所有引用的函数会被调用,但是编译器可以自由选择最有效的顺序。
标准是否指示此表达式的评估顺序?
if( functionA() && functionB() && functionC() ) cout<<"Hello world";
最佳答案
是的,在C和C++标准中,运算符||
和&&
都需要短路和评估顺序。
C++标准说(C标准中应该有一个等效子句):
在C++中,有一个额外的陷阱:而不是会短路吗?
除非您有非常具体的要求,否则通常不建议在C++中重载这些运算符。您可以执行此操作,但是这样做可能会破坏他人代码中的预期行为,尤其是如果通过实例化模板间接使用这些操作符,并且这些操作符的类型重载。
关于c++ - 是否必须使逻辑运算符短路?和评估顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63974979/