gpt4 book ai didi

c++ - 是否必须使逻辑运算符短路?和评估顺序?

转载 作者:行者123 更新时间:2023-12-03 07:03:40 27 4
gpt4 key购买 nike

ANSI标准是否要求逻辑运算符以C或C++短路?

我很困惑,因为我回想起K&R的书,说您的代码不应该依赖这些操作的短路,因为它们可能不是。有人可以指出逻辑运算符在标准中总是短路的地方吗?我对C++最为感兴趣,对于C的回答也很好。

我还记得阅读(不记得在哪里)未严格定义评估顺序,因此您的代码不应依赖或假定表达式中的函数将以特定顺序执行:在语句末尾,所有引用的函数会被调用,但是编译器可以自由选择最有效的顺序。

标准是否指示此表达式的评估顺序?

if( functionA() && functionB() && functionC() ) cout<<"Hello world";

最佳答案

是的,在C和C++标准中,运算符||&&都需要短路和评估顺序。

C++标准说(C标准中应该有一个等效子句):

1.9.18

In the evaluation of the following expressions

a && b
a || b
a ? b : c
a , b

using the built-in meaning of the operators in these expressions, there is a sequence point after the evaluation of the first expression (12).



在C++中,有一个额外的陷阱: 而不是会短路吗?

Footnote 12: The operators indicated in this paragraph are the built-in operators, as described in clause 5. When one of these operators is overloaded (clause 13) in a valid context, thus designating a user-defined operator function, the expression designates a function invocation, and the operands form an argument list, without an implied sequence point between them.



除非您有非常具体的要求,否则通常不建议在C++中重载这些运算符。您可以执行此操作,但是这样做可能会破坏他人代码中的预期行为,尤其是如果通过实例化模板间接使用这些操作符,并且这些操作符的类型重载。

关于c++ - 是否必须使逻辑运算符短路?和评估顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63974979/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com