Поскольку размер строки равен 0, а значение 0 <= -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;
    }
}

На выходе получается бесконечный цикл.

c++
0
Kundan Kumar 17 Окт 2019 в 05:27

1 ответ

Лучший ответ

string::size() возвращает тип size_t, который является числом без знака. Когда вы вычитаете 1, вы получаете не значение -1, а число 2^64 в 64-битной архитектуре.

Поскольку вы используете int в качестве счетчика, его максимальное значение равно 2^31, что намного меньше, чем 2^64. После выполнения 2^31 ваш счетчик переполняется и принимает отрицательное значение. Таким образом, ваш цикл запускается бесконечное количество раз.

2
Matheus Nogueira 17 Окт 2019 в 02:39