Вы изменили сценарий использования.
Предполагаемое использование static_cast
(и других приведений в стиле c ++) для указания намерений программиста.Когда вы пишете auto value = static_cast<int32_t>(value_64);
, вы говорите «Да, я очень * намерен * уменьшить это значение, возможно, обрезая его, когда я выполняю это назначение» .В результате компилятор, который, возможно, был бы склонен жаловаться на это преобразование при нормальных обстоятельствах (например, если бы вы написали int32_t value = value_64;
), вместо этого наблюдает "хорошо, программист сказал мне, что это то, что онинамеревался; зачем они мне врут? " и скомпилирует код молча.
Если вы хотите, чтобы ваш код C ++ предупреждал или выдавал ошибку при небезопасных преобразованиях, вам нужно явно не используйте static_cast
, const_cast
, reinterpret_cast
и позвольте компилятору выполнять свою работу.У компиляторов есть флаги, которые меняют способ обработки предупреждений (понижение int64_t
до int32_t
обычно приводит только к предупреждению), поэтому убедитесь, что вы используете правильные флаги, чтобы предупреждения воспринимались как ошибки.