给定C ++函数foo
:
bool foo();
以及以下代码行
bool some_bool = false;
some_bool = some_bool and foo();
我发现foo()
虽然可能有副作用但未被调用。这种行为的名称是什么,它是依赖于编译器的吗?
答案 0 :(得分: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;
答案 1 :(得分:2)
如果some_bool
已经为假,则不会调用foo()
(优化),因为无论foo()
返回什么,最终结果始终为false。