我正在学习c ++而且我遇到了一些我无法解释的行为.下面的两段代码提供了不同的结果,而我希望它们是等价的:
success = true; vector::const_iterator i; for (i = instructions.begin(); i != instructions.end(); ++i) { bool up = update(*i); success = success && up; }
和
success = true; vector::const_iterator i; for (i = instructions.begin(); i != instructions.end(); ++i) { success = success && update(*i); }
我的印象是第二个版本总是采用迭代器的初始值.有人可以解释一下原因吗?
这两段代码并不相同.
第一个总是打电话update
,而第二个不打电话.原因是&&
做了一些事情short-circuit boolean evaluation
.如果 success
为false,则不评估表达式的后半部分.
请注意,您没有发布update
返回的内容或内容.因此,我们只能猜测可能是什么能够从返回update
,其或者将要true
或false
.
如果您想要update
始终被调用,则应将其放在&&
表达式的第一位.