zoukankan      html  css  js  c++  java
  • #include和直接写class加类名的区别

    假设B的定义是在B.h中,而存在下面这个文件:

    // A.h
    --------------------------------------------
    class A
    {
    private:
      B * impl_;
    };
    --------------------------------------------

    // A.cpp
    --------------------------------------------
    #include <A.h>
    // 其他具体实现
    --------------------------------------------
    那么直接编译的话,由于编译器不知道B的存在,就会报编译错误。为了解决这个问题,可以在A.h中include B.h,如下:

    // A.h
    --------------------------------------------
    #include <B.h>

    class A
    {
    private:
      B * impl_;
    };
    --------------------------------------------
    但是这样,一旦B的定义修改,那么A.h也就会重新编译,导致所有用到A.h的文件也需要重新编译,这样就造成了编译依赖,增加了编译的时间,在大型项目中,如果很多这样的地方的话,甚至可能极度增加编译时间。为了避免这种情况,我们可以这么做

    // A.h
    --------------------------------------------
    class B;

    class A
    {
    private:
      B * impl_;
    };
    --------------------------------------------

    // A.cpp
    --------------------------------------------
    #include <A.h>
    #include <B.h>
    // 其他具体实现
    --------------------------------------------
    通过在A.h中声明class B,在A.cpp中include B.h,这样即使B.h改变,A.h也不会改变,其他使用到A.h的文件也就不需要重新编译了,这样就可以避免编译依赖。
  • 相关阅读:
    C#面向对象的基本原则
    EXTJS学习笔记:类似于Window的登录窗体
    c# 类似于QQ表情弹出框功能的二种实现方法
    EXTJS学习笔记:grid之分组实现groupingview
    RibbonBar屏蔽右键
    webservice安全性浅谈
    js生成二维码以及插入图片
    c++之const解惑
    最短路径连接表形式
    深入理解c++之动态内存和指针
  • 原文地址:https://www.cnblogs.com/ORC-Lee/p/4848220.html
Copyright © 2011-2022 走看看