C++ if语句数学评估错误

Pet*_*ppy 1 c++

我有一个我认为是数学错误的东西,我不完全理解它为什么会发生.

if (mNextBottomIndex < mBlocks.size() - 1) {
  if (mBlocks[mNextBottomIndex + 1]->getGlobalPosition().y >= -mBlocks[mNextBottomIndex + 1]->getHeight()) {
    mBlocks[mNextBottomIndex + 1]->setAlpha(1.0f);
    mNextBottomIndex++;
  }
}
Run Code Online (Sandbox Code Playgroud)

它正在评估inner if statement因为mBlocks.size() = 0mNextBottomIndex = 3(或mNextBottomIndex等于任何数字> 0).所以我的问题是,鉴于最后一句中的变量,它是如何过去的outer if statement?应用程序不在后台线程中处理这些变量,并且变量在之前和之后是相同的outer if statement

我纠正外if statement

if (mBlocks.size() != 0 && mNextBottomIndex < mBlocks.size() - 1) {
  if (mBlocks[mNextBottomIndex + 1]->getGlobalPosition().y >= -mBlocks[mNextBottomIndex + 1]->getHeight()) {
    mBlocks[mNextBottomIndex + 1]->setAlpha(1.0f);
    mNextBottomIndex++;
  }
}
Run Code Online (Sandbox Code Playgroud)

它现在似乎没有崩溃.

ccp*_*pgh 9

mBlocks.size()是一个unsigned int.如果从值为0的无符号整数中减去1,它将下溢为一个大的正数.