C++函数模板的使用
简介
使用c++函数模板有非常方便的功能,可以利用模板函数的自动类型推导功能完成很多功能。比如:生成一些模板类实例(例如:stl make_pair, make_tuple,还比如boost::typeindex::type_id等几个方法…),可以对提前定义的模板类来做一些提前定义某些特性,比如对某个提前声明的模板类重载流操作…… 。
函数模板虽然非常好,但是它也存在一些潜在的问题,虽然你可能没有关注到这个问题,但是如果你使用不当的话,那么那些潜在的性能问题,可能就会发生。
潜在类型转换问题
#include <iostream>
#include <string>
using namespace std;
template <typename T>
void println(T t)
{
cout << t << endl;
}
int main(int argc, char ** argv)
{
string hello("hello");
string &hello_ref = hello;
const string &hello_const_ref = hello;
println(hello);
println(hello_ref);
println(hello_const_ref);
return 0;
}
几个小问题
上面的小程序非常简单,就是定义一个模板方法:println,这个println模板方法很简单,仅仅完成通过标准流输出,然后输出换行符。
然后在main函数中,对三种不同的字符串类型都调用这个模板方法来进行输出。那么我有几个问题想问您?
调用println(hello)
方法,这个模板方法的实际参数类型是什么?就是模板中的T的具体类型是什么?这儿很明显应该是s