Поскольку размер строки равен 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;
}
}
На выходе получается бесконечный цикл.
1 ответ
string::size()
возвращает тип size_t
, который является числом без знака. Когда вы вычитаете 1, вы получаете не значение -1
, а число 2^64
в 64-битной архитектуре.
Поскольку вы используете int
в качестве счетчика, его максимальное значение равно 2^31
, что намного меньше, чем 2^64
. После выполнения 2^31
ваш счетчик переполняется и принимает отрицательное значение. Таким образом, ваш цикл запускается бесконечное количество раз.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .