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的文件也就不需要重新编译了,这样就可以避免编译依赖。
  • 相关阅读:
    Windows Phone 四、控件模版
    Windows Phone 三、样式和资源
    Windows Phone 一、XAML基础语法
    第三次月考
    第三次月考
    第七章 LED将为我们闪烁:控制发光二极管
    第六章 第一个linux个程序:统计单词个数
    第五章 搭建S36510开发板的测试环境
    Android深度探索读后感 第四章
    Android深度探索读后感 第三章
  • 原文地址:https://www.cnblogs.com/ORC-Lee/p/4848220.html
Copyright © 2011-2022 走看看