接受 const引用 或 const指针 的函数可以分别用 非const对象的引用或指针 来调用,无须产生新的实例化。如果函数接受非引用类型,形参类型实参都忽略 const,即,无论传递 const或非const对象 给接受非引用类型的函数,都使用相同的实例化。
模板函数形参 是否使用相同实例
const T* t 相同
T* t 不相同
const T& t 相同
T& t 不相同
const T t 相同
T t 相同
测试程序:
template<typename T>
void print_type(T* t)
{
std::cout << typeid(t).name() << std::endl;
}
int main(int argc, char* argv[])
{
const char a = 0;
char b = 0;
print_type(&a);
print_type(&b);
return 0;
}
下断点,查看反汇编,就知道是否同一个实例
疑惑:
按下半句话的意思,除了引用形参,其他类型形参应该都是相同实例。但是测试结果T*使用的是不同的实例。