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

Revision ru1, by 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++ приводит к бесконечному циклу. Неожиданно, правда?

Tags g++, ub

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en2 English MikeMirzayanov 2016-05-31 18:26:45 85
en1 English MikeMirzayanov 2016-05-31 17:47:10 689 Initial revision for English translation
ru1 Russian MikeMirzayanov 2016-05-31 17:43:14 634 Первая редакция (опубликовано)