当前位置:  开发笔记 > 编程语言 > 正文

c ++迭代器卡在第一个值

如何解决《c++迭代器卡在第一个值》经验,为你挑选了1个好方法。

我正在学习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);        
}

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



1> PaulMcKenzie..:

这两段代码并不相同.

第一个总是打电话update,而第二个不打电话.原因是&&做了一些事情short-circuit boolean evaluation.如果 success为false,则不评估表达式的后半部分.

请注意,您没有发布update返回的内容或内容.因此,我们只能猜测可能是什么能够从返回update,其或者将要truefalse.

如果您想要update始终被调用,则应将其放在&&表达式的第一位.


刚刚使用此信息更新了答案.
也许值得一提的是,修复是写成功=更新(*i)&&成功;`..如果你写'success = true,整个过程变得更容易; for(const auto&inst:instructions)success = update(inst)&& success;`(当然是多行)
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有