/*
编译器并不是把函数模板处理成能够处理任意类的函数
编译器从函数模板通过具体类型产生不同的函数
编译器会对函数模板进行两次编译
在声明的地方对模板代码本身进行编译;在调用的地方对参数替换后的代码进行编译。
*/
#include<iostream>
using namespace std;
template <typename T>
class AA
{
public:
static T m_a;
};
template <typename T>
T AA<T>::m_a = 0;//需要在前面加上T,相当于修饰符
class AA1
{
public:
static int m_a;
};
int AA1::m_a = 0;
class AA2
{
public:
static char m_a;
};
char AA2::m_a = 0;
int main(void)
{
AA<int>a1, a2, a3;
a1.m_a = 10;
a2.m_a++;
a3.m_a++;
cout << AA<int>::m_a << endl;
AA<char>b1, b2, b3;
b1.m_a = 'a';
b2.m_a++;
b3.m_a++;
cout << AA<char>::m_a << endl;
//m_a 应该是 每一种类型的类 使用自己的m_a
system("pause");
return 0;
}
/*
static关键字定义的属性属于整个类的共有
但是模板里的static在具体化的时候产生的变量是单独产生的,不是只产生一次
static定义的变量每个家族类都有自己的m_a 。应该是 每一种类型的类 使用自己的m_a
从类模板实例化的每个模板类有自己的类模板数据成员,该模板类的所有对象共享一个static数据成员
和非模板类的static数据成员一样,模板类的static数据成员也应该在文件范围定义和初始化
每个模板类的具体话后有自己的类模板的static数据成员副本
=========================================================================
12
c
请按任意键继续. . .
=========================================================================
*/
13模板类里面static变量定义的属性在二次编译时产生不同的属性的变量
猜你喜欢
转载自blog.csdn.net/baixiaolong1993/article/details/89482668
今日推荐
周排行