Для типов без знака добавление гарантированно будет изменено: если вы добавите 1
к максимальному uint64_t
, вы получите 0
.
С типами со знаком, как в C, так и в C ++, перенос - это неопределенное поведение: все может произойти, и на практике компилятор может делать то, чего вы не ожидаете, если у вас включена оптимизация.
Так что нет, это не гарантируется стандартом.
Тем не менее, многие компиляторы дают возможность в качестве расширения стандарта гарантировать завернутое поведение для подписанных типов, и в этом случае ответ - да. Например, см. -fwrapv
GCC и Clang.