由于字符串的大小为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;
}
}
在输出中,它给出了无限循环。
答案 0 :(得分:2)
string::size()
返回一个size_t
类型,它是一个无符号数字。在减去1时,在64位体系结构中,您获得的值-1
不是2^64
。
当您使用int
作为计数器时,其最大值为2^31
,比2^64
低得多。执行2^31
后,您的计数器溢出并变为负数。因此,使循环运行无限次。