Компиляция:
#include <iostream>
int main()
{
for (int i = 0; i < 4; ++i)
std::cout << i*1000000000 << std::endl;
}
и gcc
выдает следующее предупреждение:
warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations]
std::cout << i*1000000000 << std::endl;
^
Я понимаю, что существует знаковое целочисленное переполнение.
Что я не могу получить, почему значение i
нарушено этой операцией переполнения?
Я прочитал ответы на Почему целочисленное переполнение на x86 с GCC вызывает бесконечный цикл?, но я все еще не понимаю, почему это происходит - Я понимаю, что "undefined" означает "что-нибудь может случиться", но какова основная причина этого конкретного поведения?
В сети: http://ideone.com/dMrRKR
Компилятор: gcc (4.8)