类模版的实例化过程

vcgaoshou vcgaoshou 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
定义类模版后,再定义类模版的对象具体过程为
1。编译程序将类模版实例化成模版类,
2。在运行时实例化成对象。
比如
template<typename T,int n>class Array{
public:
Array();
~Array();
protected:
int size;
T* element;
};
template<typename T,int n>Array<T,n>::Array(){
if(n>1)size=n;
else size=1;
element=new T[size];
}
template<typename T,int n>Array<T,n>::~Array(){
delete [] element;
}
书上说编译器将定义语句Array<int ,5> intary;编译后,实际生成如下类
public:
Array();
~Array();
protected:
int size;
T* element;
};
我的问题是:n怎么不见了呢?运行时到哪儿去找n呢,也就是当类模版存在非类型参数时,到底如何编译的,编译器
如何处理非类型参数生成的,生成的模版类的形式是怎样的。
如果是生成如下形式
public:
Array(int n=5);
~Array();
protected:
int size;
T* element;
};
好像也有问题,这样岂不是定义对象要提供初值了,类模版中的构造函数并不需要初值啊
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
vcgaoshou
C++ 语言 65,214 成员 250,514 内容