Template使用的易错点
#include <iostream>
using namespace std;
template<typename T>
T const& Max(T const& var1, T const& var2)
{
return var1 > var2 ? var1 : var2;
}
int main()
{
int a = 10;
float b = 19.2;
const int& var = Max<int>(a, b);
cout << &var << endl; // 0000001EA577FB14
cout << &b << endl; // 0000001EA577FA14
}
在上述程序中,我们不难发现,当传入的参数数据类型不一样时,会进行如下操作:
将传入函数的实参float强制类型转换成模板显式指定的数据类型int const,并且将转换后的数据类型放入一个新的存储空间中,再将此空间的引用(int const&)传入函数中。
我们看到函数返回的变量地址与我们传入的变量地址并不相同,因此,一定要注意,当我们传入的参数需要强制类型转换为我们显式指定的模板数据类型时,千万不要返回输入变量的引用。