Назад к вопросам
JuniorТеорияЧасто
Что произойдёт, если собрать и запустить эту программу?
#include <iostream>
int main() {
unsigned i = 2;
while (i >= 0) {
std::cout << i << '\n';
--i;
}
}Выведет 2, 1, 0, затем наибольшее значение unsigned и не остановится
- Ждать остановки на -1:
unsignedне бывает отрицательным, поэтому--iпри0даёт наибольшее значениеunsigned, иi >= 0остаётся истинным. - Ждать неопределённого поведения: оно возникает только при переполнении знаковых чисел, а арифметика
unsignedпо определению идёт по кругу, и цикл продолжает печатать.
- Как переписать этот отсчёт, чтобы он напечатал
2,1,0и остановился, аiосталасьunsigned? - С какими флагами предупреждений GCC и Clang сообщат, что условие
i >= 0здесь всегда истинно?