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的文件也就不需要重新编译了,这样就可以避免编译依赖。
  • 相关阅读:
    poj 1466 Girls and Boys
    poj 1486 Sorting Slides
    poj 2112 Optimal Milking
    poj 1274 The Perfect Stall
    SHoj 420 购买装备
    poj 2987 Firing
    SHoj A序列
    FOJ Problem 2271 X
    XidianOJ 1028 数字工程
    XidianOJ 1030 三数和
  • 原文地址:https://www.cnblogs.com/ORC-Lee/p/4848220.html
Copyright © 2011-2022 走看看