在模板推导的过程中,只有当模板参数不是以引用方式传递时,字符串才会退化为指针。
因此,对于同一个字符串常量,传给不同的函数模板,一个以引用的方式,一个以传值的方式,二者得到的型别不同。
下面的代码来自于《C++ Template》
#include <typeinfo>
#include <iostream>
template <typename T>
void ref(const T& x)
{
std::cout << typeid(x).name() << std::endl;
}
template <typename T>
void noref(T x)
{
std::cout << typeid(x).name() << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
ref("hello"); //char const [6]
noref("hello"); // char const *
}