以下示例:
template<typename T>
T Get()
{
T t = 10;
return t;
}
int main()
{
int i = Get<int>(); // will work
float f = Get<float>(); // will work
}
函数重载不适用于不同的返回类型。 那么,在这种情况下编译器最终会生成什么呢?
答案 0 :(得分:0)
通过Get<int>
或Get<double>
调用函数时,编译器不需要推导返回类型。代码T t = 10
将执行转换操作以键入T
。如果将10
替换为非整数,例如1.5
:
template<typename T>
T Get()
{
T t = 1.5;
return t;
}
main()
{
int i = Get<int>(); // returns 1
double f = Get<double>(); // returns 1.5
}
但是,对于某些编译器,此代码会生成警告
warning: implicit conversion from 'double' to 'int' changes value from 1.5 to 1 [-Wliteral-conversion]
在这种情况下T t = static_cast<T>(1.5);
可能是更好的选择。