循环根本不应该运行,但可以运行无数次

时间:2019-10-17 02:27:13

标签: c++

由于字符串的大小为0,并且0 <= -1为false,因此循环根本不应该运行,但是在此代码中,它无限次地运行。我不知道原因。请帮忙。

#include<iostream> 
#include<string>
using namespace std;
int main() {
    string arr[] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
    cout << arr[0].size() << endl; // It gives output 0
    cout << arr[1].size() << endl; // It gives output 0
    // This loop runs infinite number of times, but Why? 
    // As 0 <= -1 is false , so this loop should not run at all.
    for(int i = 0; i <= arr[1].size() - 1; i++) {
        cout << "aaa" << endl;
    }
}

在输出中,它给出了无限循环。

1 个答案:

答案 0 :(得分:2)

string::size()返回一个size_t类型,它是一个无符号数字。在减去1时,在64位体系结构中,您获得的值-1不是2^64

当您使用int作为计数器时,其最大值为2^31,比2^64低得多。执行2^31后,您的计数器溢出并变为负数。因此,使循环运行无限次。