c++の前置き参照宣言

1203 ワード

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の前方宣言を1つするだけでいいです.引用もポインタも固定サイズなので、includeは必要ありません.
  • 2.メンバー関数を宣言するパラメータまたは戻りタイプは、順方向宣言の性質
  • を利用することもできる.
    class string;
    class foo;
    class Sample
    {
    public:
        foo foo_test(foo &);
    private:
        string &s;
        foo *f;
    };
    

    ここではfooクラスを定義していませんが、メンバー関数はクラスオブジェクトのサイズを占めないので、c++コンパイラはオブジェクトのサイズを決定することができます.
    順方向宣言の役割は、コンパイラに別の場所で定義されたタイプであることを伝えることです.これでC++コンパイラは正しいシンボルテーブルを生成できます.