undefined behavior
Шикарный пример неопределённого поведения в C++
:
#include <iostream>
int main() {
for (int i = 0; i < 4; ++i)
std::cout << i*1000000000 << std::endl;
return 0;
}
Если скомпилировать в gcc -O2, запуск приведёт к зависанию. Если 1000000000
заменить, скажем, на 10
, то зависания не будет.
Компилятор видит i*1000000000
, понимает, что целочисленного переполнения в int быть не может по определению, соображает, что такое возможно только если i будет меньше 4 и выбрасывает проверку на i < 4
из кода нафиг.
Подглядел у winnie