C++ 在 while 语句中评估基础 if 条件
C++ evaluates underlying if condition in a while statement
我有一个问题,当 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()
前提条件不同的条件。
- 将按位if条件转换为普通if条件
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么这个if(s[j]==s[i] && i>0)条件不适用于这个[{()}]
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- 使用枚举作为条件,if 条件将返回什么,真或假?
- 为什么循环没有中断,并且 if 条件没有按预期工作?
- 使用 if 条件对数字进行分组
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取
- 在if条件下,右或左改变值的相等性检查是否有任何区别
- 为什么当 while 循环中的 if 条件变为 false 时,我的函数不输出最后一条语句?
- 将子字符串与字符串数组进行比较的 IF 条件会在C++中产生错误
- 在 constexpr-if 条件下比较 constexpr 函数参数会导致错误
- 带有逻辑 OR 运算符的 if 条件的缩写?
- 为什么我可以将 ifstream 文件置于 if 条件?
- 如何将特征张量的值作为'if'条件表达式
- 在 c++ 中检查 if 条件中的向量位置范围
- 如何在Char数组中搜索Char在IF条件语句中
- 未正确评估'If'条件