C++ 循环根本不应该运行,但它运行无限次

C++ 循环根本不应该运行,但它运行无限次,c++,C++,由于字符串的大小为0,且0,string::size()返回一个size\t类型,该类型是一个无符号数字。当您减去1时,您得到的不是-1的值,而是64位体系结构中的数字2^64 当您使用int作为计数器时,其最大值为2^31,远低于2^64。执行2^31后,计数器溢出并变为负数。因此,使循环无限次地运行。字符串::size()返回一个size\t类型,它是一个无符号的数字。当您减去1时,您得到的不是-1的值,而是64位体系结构中的数字2^64 当您使用int作为计数器时,其最大值为2^31,远低

由于字符串的大小为0,且0,
string::size()
返回一个
size\t
类型,该类型是一个无符号数字。当您减去1时,您得到的不是
-1
的值,而是64位体系结构中的数字
2^64

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

字符串::size()返回一个
size\t
类型,它是一个无符号的数字。当您减去1时,您得到的不是
-1
的值,而是64位体系结构中的数字
2^64


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

string::size()
返回一个
size\t
,它是一个无符号类型。这就是
string.size()-1
导致溢出的原因。哦,是的,谢谢。我没有找到未签名的部分。
string::size()
返回一个
size\t
,它是一个未签名类型。这就是
string.size()-1
导致溢出的原因。哦,是的,谢谢。我错过了未签名的部分。
#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;
    }
}