string.length()导致麻烦

时间:2016-04-13 14:51:57

标签: c++ string

我对这个简单的问题感到困惑。 这是我的代码:

#include <iostream>
#include <string>

int main()
{
    std::string str = "bb";
    int counter;
    for (counter = str.length() - 1;  counter >= str.length() - 2;  counter--)
    {
        std::cout << "counter: " << counter << std::endl;
    }
}

基本上,它应该只打印两行然后终止程序,但它保持打印行。事实上,循环不会在counter = -1处停止,这很奇怪!为什么会这样?

1 个答案:

答案 0 :(得分:8)

std::string.length()是无符号的,因此counter中的counter >= str.length() - 2会转换为无符号值,且公式不会为真。

请尝试使用counter + 2 >= 0 && counter + 2 >= str.length()