-1

我有一个问题,当 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++;
}
4

3 回答 3

3

是不可能的。如果它评估if然后它进入while。没有提前计算是C++

PS为什么你有两个否定while

于 2012-12-07T18:09:32.993 回答
1

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

于 2012-12-07T18:24:15.483 回答
1

ite_candidats 是二叉映射树上的自定义迭代器。当没有更多节点可以访问时,ite_candidat 评估为 NULL。

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

ite_candidats operator bool() 的运算符重载

我怀疑这就是问题所在。您!!ite_candidats将使用该转换运算符强制转换ite_candidats为 a bool,将该结果取反为 yield !ite_candidats,然后再次取反为 yield !!ite_candidats

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

于 2012-12-07T20:05:55.050 回答