C++学习笔记34 模版的原理
2017-07-30 13:44
176 查看
模版在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等版本号则不会生成。
相关文章推荐
- C++学习笔记34 模版的原理
- 【C++学习笔记】标准库容器Vector可变长度实现原理
- C++模版学习笔记 非类型形参
- c++学习笔记,windows窗口模版
- C++学习笔记1(Windows程序运行原理及程序编写流程)
- C++学习笔记35 方法模版
- C++学习笔记(十四)多态原理与虚函数
- C++模版的详细介绍(学习笔记)
- C++学习笔记:函数模版
- 初探C++函数模版学习笔记
- C++学习笔记36 模版的显式具体化(template specialization)和显式实例化(template instantiation)
- Effective C++学习笔记 第五弹 29-34
- 【COM编程】从C++到COM,学习笔记,转自网络,对于理解COM原理学习很好!
- C++学习笔记34——类的static成员
- C++学习笔记1(Windows程序运行原理及程序编写流程)
- C++容器学习笔记1——模版、迭代器
- C++学习笔记:多态的实现原理
- C++学习笔记
- C++学习笔记--临时对象
- C++学习笔记12 STL Deque