美文网首页
c++中的前置引用声明

c++中的前置引用声明

作者: zhjwang | 来源:发表于2018-11-25 15:33 被阅读7次

    c++编程经验

    1.关于前置引用声明

    最近用到一些前置声明,所以做了一些研究。
    前置声明的原理:只能定义指针或者引用,因为编译器已经知道分配多大的内存了。
    有人说不必要的include,会减少编译时间。(不在.h中include,难道就不用在.cpp中包含了吗?),所以减少头文件之间的循环include,是前置声明的一大作用。

    2.定义

    类的向前引用声明只适用于指针和引用。

    class A;
    class B
    {
    public:
      A* m_a; //(不能A m_a)
    }
    

    3.向前声明的限制

    (1)不能定义foo类的对象;

    (2)可以用于定义指向这个类型的指针或引用。(很有价值的东西);

    (3)用于声明(不是定义)使用该类型作为形参或者返回类型的函数。

    4.实例

    c++编译器做的事情主要是:1.扫描符号;2.确定对象大小。
    所以很多时候并不需要将类都include进来。
    比如:

    • 1.由于所有对象类型的引用所占用的空间都是相同大的,所以c++编译器很好确认对象大小。
    class string;
    class Sample
    {
    private:
      string &s;
    }
    
    

    这里只需要做一个string的前向声明就可以了,不需要#include <string>,因为引用和指针都是固定大小的。

    • 2.声明成员函数的形参或者是返回类型,也可以利用前向声明的性质
    class string;
    class foo;
    class Sample
    {
    public:
        foo foo_test(foo &);
    private:
        string &s;
        foo *f;
    };
    

    这里,我根本没有定义一个foo类,但是还是可以这样用,因为成员函数不占类对象的大小,所以c++编译器还是可以确定对象的大小。

    前向声明的作用在于告诉编译器这是一个在别的地方定义的类型。这样C++编译器就能生成正确的符号表了。

    相关文章

      网友评论

          本文标题:c++中的前置引用声明

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