C++函数返回bool没有执行

Elr*_*337 3 c++

给定C++函数foo:

bool foo();
Run Code Online (Sandbox Code Playgroud)

以及以下代码行

bool some_bool = false;
some_bool = some_bool and foo();
Run Code Online (Sandbox Code Playgroud)

我观察到foo()虽然它可能有副作用,但没有被调用.这种行为的名称是什么,它是否依赖于编译器?

Cad*_*nge 5

这称为短路评估.

在您的示例中,some_bool为false,因此该语句some_bool && foo()始终为false.所以永远不需要评估foo().

请注意,这是标准的C/C++,并不依赖编译器,因为它可能导致您发现的未执行的代码.

编写代码的更好方法是:

bool some_bool = false;
bool foo_result = foo();
some_bool = some_bool && foo_result;
Run Code Online (Sandbox Code Playgroud)