zoukankan      html  css  js  c++  java
  • C++中模板为什么不支持分离编译

    程序运行的过程

    首先我们知道, 一个程序的执行过程分为四个部分,预处理,编译,汇编,链接
    下面用一副图来说明

    这里写图片描述

    模板的分离编译

    这里就是普通的代码,是可以进行分离编译的,但是为什么在模板中就不可以了呢,下面我们来看一段简单的代码,来进行分析

    //template.h
    template<class T>
    class AA
    {
    public:
        AA();
    private:
        T _a;
    };
    //test.cpp
    #include "template.h"
    template<class T>
    AA<T>::AA()
    :_a(0)
    {}
    //main.cpp
    #include "template.h"
    int main()
    {
        AA <int> a1;
        return 0;
    }

    运行结果如下图
    这里写图片描述
    为什么会这样呢?这要说一下模板的特点,定义一个模板类,里面的函数只有当调用的时候才会被推演,不调用就不会进行这个推演的过程,也就是说,即使你函数里写的有问题,你编译的时候并没有调用那个函数,编译器是检查不出来的。
    这里写图片描述
    所以在使用模板的时候最好不要分离编译

  • 相关阅读:
    Java_大数加法
    Java_找出最多的10个单词
    过滤文本敏感词
    JDK(Win10)下载与安装
    Agile PLM_统计物料消耗
    Java_扑克牌顺子
    Java8_stream_集合对象属性的合并
    Apache Maven下载与安装
    java泛型 无敌
    Java异常处理 无敌
  • 原文地址:https://www.cnblogs.com/chan0311/p/9427326.html
Copyright © 2011-2022 走看看