2016-07-10 2 views
2

Следующий код работает, как ожидалось т.е. печатает строку в обратномC++ строка size_t

std::string s("abcd"); 

for (int i=s.length()-1; i>=0; --i) { 
    std::cout << s[i]; 
} 

Однако, следующий код переходит в бесконечные символы полиграфических петли бросовых и, наконец, crashes-

std::string s("abcd"); 

for (std::size_t i=s.length()-1; i>=0; --i) { 
    std::cout << s[i]; 
} 

Зачем использовать size_t как тип i сбой программы?

Am с помощью г ++ поставляется с MinGW на Windows,

C:/MinGW/bin/g++ --version 
g++ (GCC) 6.1.0 
+4

GCC может [предупредить] (http://coliru.stacked-crooked.com/a/ce861d53b647251b) вам об этом: * предупреждение : сравнение беззнакового выражения> = 0 всегда истинно [-Wtype-limits] * – chris

ответ

8

Это потому, что std::size_t не может хранить отрицательные числа и, следовательно, условие всегда истинно

+0

О да ...! :) Спасибо за напоминание – nightlytrails

4

Неподписанный тип никогда не будет иметь отрицательное значение. Следовательно, условие i>=0 всегда будет оцениваться до true.

+0

возможно, вы имели в виду неподписанные –

+0

@EdHeal, конечно :) –

Смежные вопросы