目录
1.函数模板和静态变量
每个模板函数的实例,都有它自己的局部静态变量的拷贝。
例如,下面程序中有两个实例:void fun(int ) and void fun(double )。所以存在两份静态变量i的拷贝。
#include <iostream>
using namespace std;
template <typename T>
void fun(const T& x) {
static int i = 10;
cout << ++i;
return;
}
int main() {
fun<int>(1); // 输出11
cout << endl;
fun<int>(2); // 输出12
cout << endl;
fun<double>(1.1); // 输出11
cout << endl;
return 0;
}
运行结果:
11
12
11
2.类模板和静态变量
规则与函数模板相同。
每个类模板的实例,都有它自己的静态变量的拷贝。
例如,下面程序中有两个实例:Test<int> 和Test<double>。所以会存在两份静态变量count的拷贝。
#include <iostream>
using namespace std;
template <class T>
class Test {
private:
T val;
public:
static int count;
Test() {
count++;
}
};
template<class T>
int Test<T>::count = 0;
int main() {
Test<int> a;
Test<int> b;
Test<double> c;
cout << Test<int>::count << endl; //输出2
cout << Test<double>::count << endl; //输出1
getchar();
return 0;
}
运行结果:
2
1