• 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等版本号则不会生成。



  • 相关阅读:
    Redis之String
    代码质量管理工具——SonarQube
    XML文件(2)--使用DOM4J示例
    XML文件(1)--使用DOM示例
    Maven之构件
    使用JS,获取URL中指定参数的值
    jQuery导入Eclipse后报错解决方法
    关于MySQL存储过程中遇到的一个错误
    学习MySQL之数据类型(四)
    jmeter直连数据库【转】
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7258973.html
Copyright © 2020-2023  润新知