Если я правильно прочитал спецификацию ISO С++ (разделы 5.8.2 и 5.8.3), правый сдвиг отрицательных подписанных типов является специфичным для реализации и левым сдвигом undefined.
Поэтому я хотел бы найти операции сдвига по подписанным типам в нашем исходном исходном коде, который мы компилируем с помощью g++ 4.8.2.
К сожалению, я не мог найти такой вариант в руководстве . Я могу, например, скомпилировать этот код с помощью "g++ -Wall -Wextra -pedantic" без предупреждения:
int si = -1;
int left = si << 1; // -2 (multiplication by 2, sign is preserved)
int right = si >> 1; // -1 (no change, only 1s)
Может ли кто-нибудь сказать мне, есть ли такое предупреждение, а если нет, то почему gcc не заботится об этом?