【发布时间】:2017-06-16 09:14:46
【问题描述】:
我有这个max模板函数
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
标签: c++ templates max parameter-passing min