У меня есть эта функция шаблона для макснесовпадение данных и компилятор не может вывести аргумент шаблона
template <typename T>
T max(T a, T b) { return (a > b) ? a : b; }
И я хотел бы заменить эти:
int max(int a, int b){ return (a > b) ? a : b; }
char cmax(char a, char b){ return (a > b) ? a : b; }
unsigned int umax(unsigned int a, unsigned int b){ return (a > b) ? a : b; }
мне нужно a
и b
иметь один и тот же тип.
Но мой код (который я портирования от C до C++) имеет такие вещи, как это: выход
size_t myvar;
...
...
int i = max(myvar,5);
VS2015:
Error C2672 'max': no matching overloaded function found
Error C2672 'max': no matching overloaded function found
Error C2782 'T max(T,T)': template parameter 'T' is ambiguous
Error C2784 'T max(T,T)': could not deduce template argument for 'T' from 'int'
Ладно, я, вероятно, следует бросить 5
к size_t
.
Мой вопрос: почему C позволяет это? И что еще более важно, что происходит под капотом? Составляет ли компилятор 5 значение size_t или что? Каковы могут быть последствия этого?
Спасибо :)
Обратите внимание, что ваша версия C имеет другие случаи сбоя, которые могут не генерировать предупреждение о компиляции, например. когда ввод больше, чем 'INT_MAX' –