以下函数模板尝试计算输入值中的最大值。当我将它用于单一数据类型时,FT 工作得很好,但当它用于两种不同的数据类型时会显示警告。
函数如下:
template<typename T,typename U>
const T& maxVal(const T& var1,const U& var2)
{
if(var1<var2)
return var1;
else
return var2;
}
用户函数(main)如下:-
int main(void)
{
int var1 = 10;
double var2 = 20.10;
cout<<maxVal(10,20.10)<<endl; // warning displayed " returning reference to temporary"
cout<<maxVal(var1,var2)<<endl; // warning still persists in this case
return 0;
}
当我删除 U
数据类型并将其替换为 T
时,程序运行顺利。为什么会这样?
最佳答案
template<typename T>
const T& maxVal(const T& var1,const T& var2)
如果您使用 maxVal(10,20.10)
,一个将被隐式转换为另一个。这里 double 被转换为 int
template<typename T,typename U>
const T& maxVal(const T& var1,const U& var2)
在这个实现中,你总是返回 T
所以如果 var2
是 max 它被转换为 T
关于C++ 模板 :-Warning in a function template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18235193/