传值类型模板参数
template<class T>
void fn(T param)
param是通过传值的方式传递的,也就是说t这个形参是通过函数fn被调用时的实参拷贝赋值的,param是一个全新的对象,因此实参的常量性(const),引用性都不会被传递到形参param上:
#include <iostream>
#include <typeinfo>
using namespace std;
template<class T>
void fn(T param)
{
cout<<" "<<is_same<T, int>::value;
cout<<" "<<is_same<T, const int>::value;
cout<<" "<<is_same<T, const int&>::value<<endl;
}
int main ()
{
int x = 1;
const int cx = x;
const int& rx = x;
fn(x); //输出:1 0 0
fn(cx); //输出:1 0 0
fn(rx); //输出:1 0 0