signed overflow - undefined behavior

Jun 18, 2014 18:23

Написал цикл (тут в упрощённом виде):

#include
int main() {
for (int i = 0; i < 4; ++i)
std::cout << i*1000000000 << std::endl;
}
Долго чесал репу, почему цикл завис. Оказалось, компилятор думает так:
(i * 1000000000 ) не должно давать overflow, следовательно условие (i < 4) всегда истинно.

upd: спасибо joreg и kodt_rsdn, взял у них наиболее простой зависающий код, вставил в пост. Компилировать как g++ -O2, версия g++ - 4.8.2

c++

Previous post Next post
Up