【发布时间】:2015-11-27 07:12:02
【问题描述】:
有时 Visual C++ 会忽略 if 条件并且从不输入它! 在调试模式下,我看到条件表达式的值为真,但 C++ 忽略了它!
像这样:
if (childrens.at(j)->rules.size() > tempMax) {
tempMax = childrens.at(j)->rules.size();
}
当我把它改成这个时它可以正常工作:
tempInt = childrens.at(j)->rules.size();
if (tempInt > tempMax) {
tempMax = tempInt;
}
为什么,解决方法是什么?
【问题讨论】:
-
@ataman 这怎么可能有帮助?
-
首先,你怎么知道条件为真?其次,你怎么知道 if 语句没有被执行?我愿意打赌你在这两个假设之一上是错误的。
-
遗憾的是调试器并不总是正确的。因为调试器和编译器有非常不同的解释,所以我之前在 SO 上搞砸了自己。我不知道
rules是什么,但在标准库中的大多数类中,size() 返回一个无符号值。将其与 int 进行比较,您将度过一段糟糕的时光。将该无符号值填充到一个临时 int 中,测试该 int,您将得到一个非常不同的结果。我首先将警告提高到 MSVS 允许的最迂腐级别并进行重建。警告中可能有启示。 -
@user4581301 正在做某事。我的猜测是,
tempMax是否定的;也许您最初将其设置为 -1。与无符号值相比,它本身会被转换为无符号并回绕成一个非常大的数字。
标签: c++ visual-c++