2014-01-15 1 views
0

Я не вхожу в цикл, используя size_t. Зачем? Если я использую int я войти в петлю и выход: 11, 11Странная петля с size_t

int main() 
{ 
    int j = 11; 
    for (size_t i = 11; i > - 1; --j, i -=12) 
    { 

     std::cout << i << ", " << j << std::endl; 

    } 
    return 0; 
} 
+0

см. Тип продвижения по службе. – Jarod42

+0

Если вы скомпилировали с включенными предупреждениями (например, 'gcc -Wall ...'), ваш компилятор предупредил бы вас, что 'i> - 1' всегда является ложным, и поэтому ваш цикл никогда не будет выполняться. Сообщение Take-home: ** всегда компиляция с включенными предупреждениями и вниманием к любым генерируемым предупреждениям !!! **. –

+2

Как говорит Бьярн: «Используйте' int', пока у вас не будет причин не делать этого ». В вашем случае у вас нет причин не делать этого. – olevegard

ответ

7

size_t обычно представляет собой значение без знака. В вашем режиме цикла вы говорите i > -1. Так как i является неподписанным типом, то -1 преобразуется в этот тип и будет иметь максимальное значение для этого типа.

В связи с этим вы эффективно сравниваете 11 (начальное значение i) с максимальным значением для size_t, а результат - false, поэтому цикл никогда не вводится.