Как и в другом ответе, нет, sizeof не защитит от того, что вы пытаетесь сделать. Он заботится о ширине байтов типов, а не о чем-либо еще.
Вы спрашиваете о переполнении целых чисел, но в вашем примере есть удвоения. Двойные числа с плавающей запятой, и AFAIK имеют четко определенную причину «переполнения». В случае значения, которое превышает максимальное значение, вы получите + INF, положительную бесконечность. Но вы потеряете много точности задолго до этого момента. Значения с плавающей точкой не будут меняться.
AFAIK, в соответствии с текущими соответствующими стандартами C / C ++, нет никакого способа портативно обнаружить "переполнение" беззнакового целого числа (которое хорошо определено), но gcc и clang имеют встроенные средства для его обнаружения. Вы можете попытаться предсказать переполнение без знака, но лучшие и наиболее переносимые методы по-прежнему горячо обсуждаются.
Переполнение со знаком целого числа - неопределенное поведение, означающее, что реализация может свободно делать все, что захочет, встречая его.
Если вы абсолютно не готовы развернуть собственную криптографию против лучших практик , вам следует внимательно изучить, что сделали другие реализации, и убедиться, что вы понимаете, почему.
Стоит также отметить, что с точки зрения безопасности переполнения целых чисел и чисел с плавающей точкой НЕ совпадают с переполнениями буфера.