美文网首页C/C++
C/C++前向声明

C/C++前向声明

作者: cx7 | 来源:发表于2018-10-09 21:16 被阅读0次

    C/C++前向声明

    前向声明是为了
    1. 避免头文件循环引用
    2. 避免引入头文件
    

    头文件循环引用

    如果类A包含了类B 而B.h包含了A.h就会造成头文件的循环引用
    #include "B.h"
    class A {
    private:
        B *b;
    };
    
    #include "A.h"
    class B {
    };
    因为编译器在编译到B.cpp时 会先处理A.cpp 然而A.cpp中引用了B 会导致死循环错误
    
    解决方法是在A.cpp中前向声明B 告诉编译器B是一个类 编译时先跳过 
    #include "B.h"
    class B;
    
    class A {
    private:
        B *b;
    };
    

    避免引入头文件

    如果类A用到了某个内部的类 打包时就不得不把内部的头文件也对外开放
    库的开发者肯定不希望对外暴露内部的细节 所以需要利用前向声明跳过
    #include "B.h"
    
    class A {
    private:
        B* b;
    }
    
    可以改为 去除对B.h的引用 改为在A.cpp中引用B.h
    class B;
    
    class A {
    private:
        B* b;
    };
    
    如果类A在命名空间test中 则这样声明
    namespace test {
    class B;
    }
    

    相关文章

      网友评论

        本文标题:C/C++前向声明

        本文链接:https://www.haomeiwen.com/subject/rwqeaftx.html