C++ 模板 :-Warning in a function template

标签 c++ templates

以下函数模板尝试计算输入值中的最大值。当我将它用于单一数据类型时,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/

相关文章:

java - 函数参数中的模板

c++ - 为什么以后不能在模板函数中添加默认参数?

c++ - 为什么我的 Qt 应用程序在执行时不显示 GUI?

c++ - CString 用于静态方法

c++ - 派生类的头文件中声明的字符串在父类(super class)中为空

c++ - 如何使用类的模板参数作为链表的模板参数传递?

c++ - 查找模板参数的 typeid

C++ 控制台模式程序在 Mac 和 Windows 上产生不同的结果

c++ - 弱/共享指针,检测何时有用户剩余, boost

C++ 枚举类作为可变模板参数