【发布时间】:2015-07-08 12:16:21
【问题描述】:
考虑一下代码的这种平静:
template<class T>
void f(const T& t)
{
static int x = 0;
cout<<++x<<endl;
}
int main()
{
int j = 0;
const int i = 0;
f(5);
f(i);
f(j);
}
我已经为 3 种类型调用了该函数。虽然5和j可以是同一个东西,只是int,const int i肯定是不同的类型。
但无论如何我的输出是:
1
2
3
这意味着编译器为不同类型实例化相同的函数。
我对么?谁能解释一下为什么?
【问题讨论】:
-
因为模板就是这样工作的! :-)
-
通过
cout << &x << endl;打印x的地址可能是一种更简单的方法来识别正在调用的对象。最好的是cout << __PRETTY_FUNCTION__ << endl;,但不能保证在所有编译器中都有。
标签: c++ templates instantiation type-deduction