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

时间:2015-05-15 09:29:48

标签: c++

给定C ++函数foo

bool foo();

以及以下代码行

bool some_bool = false;
some_bool = some_bool and foo();

我发现foo()虽然可能有副作用但未被调用。这种行为的名称是什么,它是依赖于编译器的吗?

2 个答案:

答案 0 :(得分:5)

这称为short-circuit evaluation

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

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

编写代码的更好方法是:

bool some_bool = false;
bool foo_result = foo();
some_bool = some_bool && foo_result;

答案 1 :(得分:2)

如果some_bool已经为假,则不会调用foo()(优化),因为无论foo()返回什么,最终结果始终为false。

相关问题