C ++在while语句中计算底层if条件

时间:2012-12-07 18:07:47

标签: c++ if-statement while-loop operator-overloading logic

我遇到一个问题,当c ++评估while语句时,即使不满足while语句条件,它也会计算基础if语句。

ite_candidats是二进制映射树上的自定义迭代器。当没有更多节点要访问时,ite_candidat的计算结果为NULL。所以,结束了。但是,我从ite_candidats.clecourante()调用得到一个断言失败,说我的底层节点是NULL。它不应该评估ite_candidats.clecourante(),因为它不是为了达到它。

我在调试模式下运行程序,并且!!当没有更多节点可访问时,ite_candidats确实评估为false。如果我注释掉if块,程序就会退出while循环,一切正常......

运算符重载ite_candidats运算符bool()不会调用clecourante()。

while(!!ite_candidats){
    if(ite_candidats.clecourante() != nompersonne){
        {...}
    }
    ite_candidats++;
}

3 个答案:

答案 0 :(得分:3)

这是不可能的。如果它评估if,则它会进入while。没有提前计算C++

P.S。你为什么在while中有两个否定?

答案 1 :(得分:1)

粗略猜测:ite_candidats在代码中递增。可能结束迭代器没有评估为0.

答案 2 :(得分:1)

  

ite_candidats是二进制映射树上的自定义迭代器。当没有更多节点要访问时,ite_candidat的计算结果为NULL。

它真的评估为NULL吗?这是有点可疑的,因为你在ite_candidats.clecourante()使用点运算符而不是解引用运算符。从您发布的代码中,看起来ite_candidats是某个对象的实例,而不是指向某个对象的指针。

  

运算符重载ite_candidats运算符bool()

我怀疑这是问题所在。您的!!ite_candidats将使用该转换运算符将ite_candidats投射到bool,否定该结果以产生!ite_candidats,然后再次否定以产生!!ite_candidats。< / p>

问题是您的operator bool()正在检查与WhatEverYourCustomIteratorClassIsNamed::clecourante()的先决条件不同的条件。