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