Я пишу функцию void func(K const& val)
, какая часть класса шаблона.Как передать значения, отличные от std :: numeric_limits <basic_type> :: max(), к функции?
Предположим, я определить объект класса, как foo<unsigned short int> f;
, а затем я называю FUNC, как f.func(999999);
Что происходит значение 999999
получает преобразуется в некоторое другое значение, как она сама находится вне диапазона. Как я могу предотвратить это? Есть ли флаг компилятора или какой-либо другой способ в коде, где я могу это предотвратить?
Проверка
if(val > std::numeric_limits<K>::max())
внутри func
не помогает, так как значение уже конвертированы, когда он становится принят и в то, что находится внутри числового предела.
Например, 999998989898988989999 конвертируется в 11823
Как передать значения больше, чем станд :: numeric_limits :: макс() в функции?
P.S. Я компиляции с помощью GCC (с -std = C++ 11)
В этом случае gcc должен выпустить предупреждение. Установите '-Werror', и вы получите ошибку компиляции при попытке сделать такие вещи. – Rostislav
@Rostislav: И если код не говорит 'f.func (999999); 'but' f.func (x + y); '? –
Связанный вопрос: http://stackoverflow.com/questions/199333/how-to-detect-integer-overflow-in-c-c –