g++: осторожно, знаковое переполнение

Правка ru1, от MikeMirzayanov, 2016-05-31 17:43:14

Привет!

Знатокам C++ это конечно всё очевидно и естественно, а вот я как-то привык, что знаковое переполнение в С++ не приводит к настоящему неопределенному поведению на конкретной платформе. То есть понятно, что в зависимости от big-endianness/little-endian результат может получиться разным.

Случайно нашел пример забавного поведения:

#include <iostream>
int main()
{
    for (int i = 0; i < 300; i++)
        std::cout << i << " " << i * 12345678 << std::endl;
}

Этот код при компиляции с -O2 в современном g++ приводит к бесконечному циклу. Неожиданно, правда?

Теги g++, ub

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en2 Английский MikeMirzayanov 2016-05-31 18:26:45 85
en1 Английский MikeMirzayanov 2016-05-31 17:47:10 689 Initial revision for English translation
ru1 Русский MikeMirzayanov 2016-05-31 17:43:14 634 Первая редакция (опубликовано)