我正在学习c++,遇到了一些我无法解释的行为。下面的两段代码提供了不同的结果,而我希望它们是等效的:

success = true;
vector<instruction>::const_iterator i;
for (i = instructions.begin(); i != instructions.end(); ++i) {
    bool up = update(*i);
    success = success && up;
}


success = true;
vector<instruction>::const_iterator i;
for (i = instructions.begin(); i != instructions.end(); ++i) {
    success = success && update(*i);
}

我的印象是第二个版本始终采用迭代器的初始值。有人可以解释一下原因吗?

最佳答案

这两段代码不相等。

第一个总是调用update,而第二个则不会。原因是&&执行了称为short-circuit boolean evaluation的操作。如果success为false,则不评估表达式的后半部分。

请注意,您没有发布什么update或返回了什么。因此,我们只能假设可以从updatetrue返回的false返回什么。

如果希望始终调用update,则应将其放在&&表达式中的第一位。

10-06 09:49
查看更多