C++ 在 while 语句中评估基础 if 条件

C++ evaluates underlying if condition in a while statement

本文关键字:if 条件 评估 while 语句 C++      更新时间:2023-10-16

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

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

附言为什么while有两个否定?

粗略猜测:代码中的ite_candidats递增。 可能结束迭代器的计算结果不是 0。

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

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

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

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

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