Ø 从类模板实例化的每个模板类有自己的类模板数据成员,该模板类的所有对象共享一个static数据成员
Ø 和非模板类的static数据成员一样,模板类的static数据成员也应该在文件范围定义和初始化
Ø 每个模板类有自己的类模板的static数据成员副本
#include <iostream>
using namespace std;
template<typename T>
class AA
{
public:
AA()
{
a++;
}
static T a;
void printA()
{
cout<<"a:"<<a<<endl;
}
protected:
private:
};
template<typename T>
T AA<T>::a = 0;
int main()
{
AA<int> aa1;
aa1.printA();
AA<int> aa2;
aa2.printA();
AA<int> aa3;
aa3.printA();
AA<char> bb1;
bb1.a = 'a';
bb1.printA();
AA<char> bb2;
bb2.printA();
AA<char> bb3;
bb3.printA();
system("pause");
return 0;
}
原理: