首页 > 代码库 > C++学习笔记34 模版的原理
C++学习笔记34 模版的原理
模版在C++中具有非常重要的地位,STL就是大量运用模版写出来的。
模版的优点我就不一一列举了。这里我只说一下模版的原理。
当编译器遇到模版方法定义的时候,编译器进行语法检查,但是并不会编译模版。编译器无法编译模版定义,因为编译器不知道要使用的类型是什么,编译器不知道x和y的类型的情况下无法为x=y这样的语句生成代码。
当编译器遇到一个实例化的模版的时候,例如vector<int> vi(这里我只是拿vector举例,实际上基本类型的vector代码好像会自动存在编译器中),编译器会将模版类定义中的每一个T替换为int,从而生成vector的int版本。当模版遇到这个模版的另一个实例的时候,例如vector<string>,就会生成相应的string版本代码。
1.选择性实例化。
编译器只会为那些实际为某个类型调用的类方法生成代码。
#include <iostream> using namespace std; template<class T> class test{ private: T data; public: test(T d):data(d){ } void show()const{ cout<<"this data is "<<data<<endl; } }; int main() { test<int> ti(15); ti.show(); test<string> ts("string"); ts.show(); }
例如上面的例子编译器只会生成test的int以及string版本,其他的如double,char等版本则不会生成。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。