【发布时间】:2012-12-07 18:07:46
【问题描述】:
我有一个问题,当 c++ 评估 while 语句时,即使不满足 while 语句条件,它也会评估底层 if 语句。
ite_candidats 是二叉映射树上的自定义迭代器。当没有更多节点可以访问时,ite_candidat 评估为 NULL。所以这段时间就结束了。但是,我从 ite_candidats.clecourante() 调用中得到一个断言失败,说我的底层节点是 NULL。它不应该评估 ite_candidats.clecourante() 因为它不是为了得到它。
我在调试模式下运行程序,当没有更多节点可以访问时,!!ite_candidats 的计算结果为 false。如果我注释掉 if 块,程序就会退出 while 循环,一切正常...
ite_candidats operator bool() 的运算符重载不会调用 clecourante()。
while(!!ite_candidats){
if(ite_candidats.clecourante() != nompersonne){
{...}
}
ite_candidats++;
}
【问题讨论】:
-
while (false) expr;永远不会评估expr。您需要更深入地回顾一下您的代码,因为您的前提不正确。 -
单步调试器或在循环体中加入 printf 并验证循环体未被调用。只看上面的代码,我怀疑循环体被调用并且你的循环控制关闭了......
-
如果它进入循环,那么
!!ite_candidats就是true。如果没有,那就是false。期间。 -
我认为您需要发布一个小的、完整的、可编译的示例来产生问题。您的代码中有一些微妙的东西导致了这种行为,您误解了某些东西,或者存在编译器错误(不太可能,但确实会发生)。无论如何,细节很重要。
-
我在 clecourante() 方法中添加了一个 cout
标签: c++ if-statement while-loop operator-overloading logic