Существует зависимый от программно-аппаратной платформы псевдоним типа size_t, который представлен целым типом без знака, и который может хранить максимальный размер теоретически возможного объекта любого типа (включая массив и его аналоги, например тип символьной строки) на данной платформе. Если переменной данного типа присвоить -1, то за счёт переполнения значения можно получить максимальное значение для данного типа на целевой платформе. Это бывает полезным. Во всех остальных случаях арифметические операции с целыми числами чреваты неопределённым поведением, связанным с переполнением значения. В C++ предусмотрено исключение std:
verflow_error, которое нужно использовать для сообщения об ошибках арифметического переполнения, потому как перемножение целых типов сродни размахиванию ломом в тёмное время суток. Это только вопрос времени, когда вы кого-нибудь огреете им по спине или по голове.
Особую опасность представляют арифметические операции между типами со знаком и типами без знака, с неявным приведением типов. Таких ситуаций нужно избегать, либо пользоваться любезно предоставленным костылём static_cast<>
Поэтому совершенно неважно по какому принципу получается значение переполнения типа до тех пор, пока не выпадет катастрофическое совпадение. Например, #include
using namespace std;
int main() {
constexpr auto startup_code = 260846532;
auto red_button = 12345678;
auto startup_key = 12345678;
auto command_code = red_button * startup_key;
if (command_code == startup_code) {
puts("Launch a nuclear attack!");
}
}