我遇到一个问题,当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++;
}
答案 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()
的先决条件不同的条件。