C++学習ノート:デフォルトのネーミングスペースと匿名のネーミングスペース


C++学習ノート:デフォルトのネーミングスペースと匿名のネーミングスペース
  • 1.デフォルトのネーミングスペース
  • 1.1デフォルトネーミングスペースの定義
  • 1.2デフォルトのネーミングスペースは、他のネーミングスペース
  • を参照します.
  • 1.3デフォルトのネーミングスペースは、自分の
  • を参照します.
  • 1.4その他のネーミングスペース参照デフォルトネーミングスペース
  • 2.匿名ネーミングスペース
  • 2.1匿名ネーミングスペースの定義
  • 2.2匿名ネーミングスペースで他のネーミングスペースを参照
  • 2.3匿名ネーミングスペースで自分の
  • を引用
  • 2.4その他のネーミングスペースでは匿名ネーミングスペース
  • を参照
  • 2.5匿名ネーミングスペースの意味
  • 3.ネーミングスペースのまとめ

  • 1.デフォルトのネーミングスペース
    1.1デフォルトネーミングスペースの定義
    デフォルトネーミングスペースは、グローバルネーミングスペースとも呼ばれ、特定のネーミングスペースに配置されていないすべてのコード、すなわち、デフォルトネーミングスペース、例えばfunc()main()関数です.
    #include
    
    void func(void);
    
    int main(int argc,char**argv)
    {
         
    	std::cout<<"this is main"<<std::endl;
    	return 0;
    }
    
    void func(void)
    {
         
    	std::cout<<"this is func"<<std::endl;
    }
    

    次の点に注意してください.
  • 1.デフォルトのネーミングスペースもネーミングスペースです.
  • 2.デフォルトのネーミングスペースはグローバルです.
  • 3. main()関数は、デフォルトのネーミングスペースの下に配置する必要があります.

  • 1.2デフォルトのネーミングスペースは他のネーミングスペースを参照する
    デフォルトのネーミングスペースが他のネーミングスペースを参照する方法は、前編のネーミングスペースを使用する方法と同じであり、ここではこれ以上は言いません.
    1.3デフォルトのネーミングスペースは自分を参照
    これは、次のコードのmain()呼び出しfunc1()のように、C言語の簡単なネーミングスペースのない関数呼び出しに似ています.
    #include
    
    void func1(void);
    
    int main(int argc,char**argv)
    {
         
    	func1();
    	return 0;
    }
    
    void func1(void)
    {
         
    	std::cout<<"this is func1"<<std::endl;
    }
    

    1.4その他のネーミングスペースはデフォルトのネーミングスペースを参照
    他のネーミングスペース参照デフォルトネーミングスペースも同様に::を使用しますが、前のネーミングスペースの名前は空白です.たとえば、次のコードのネーミングスペースnsはデフォルトネーミングスペースのfunc()を参照します.
    #include
    
    void func1(void);
    
    namespace ns
    {
         
    	void func2(void)
    	{
         
    		::func1();
    	}
    }
    
    int main(int argc,char**argv)
    {
         
    	ns::func2();
    	return 0;
    }
    
    void func1(void)
    {
         
    	std::cout<<"this is ::func1"<<std::endl;
    }
    

    2.匿名ネーミングスペース
    2.1匿名ネーミングスペースの定義
    匿名ネーミングスペースはグローバルネーミングスペースと似ています.名前はありませんが、グローバルネーミングスペースは自分で定義する必要はありません.匿名ネーミングスペースは自分で定義する必要があります.方法はnamespaceの後ろにスペース名がなく、直接{}です.
    namespace
    {
         
    	void func(void)
    	{
         
    		std::cout<<"         func()."<<std::endl;
    	}
    }
    

    2.2匿名ネーミングスペースでの他のネーミングスペースの参照
    匿名ネーミングスペースが他のネーミングスペースを引用する方法は、前編のネーミングスペースを使用する方法と同じであり、ここではこれ以上は言わない.
    2.3匿名ネーミングスペースでの自己参照
    直接使用します.ネーミングスペース名接頭辞を追加する必要はありません.先に宣言した後に使用する順序を確保すれば問題ありません.
    2.4その他のネーミングスペースでの匿名ネーミングスペースの参照
    一般的な匿名ネーミングスペースは、グローバル関数の場所と同様にファイルの前に定義され、その後のネーミングスペースは匿名ネーミングスペースの内容に正常にアクセスできますが、匿名ネーミングスペースの役割はこれではなく、ファイル間でアクセスする場合にあります.したがって、実際には、単一のファイル内で匿名ネーミングスペースを使用することは、グローバル関数とあまり変わりません.
    2.5匿名ネーミングスペースの意味
  • 1.匿名ネーミングスペースのシンボルは、ファイル内部での使用に限定され、外部参照は必要ありません.
  • 2.匿名ネーミング空間効果は、グローバル変数および関数プラスstaticと同様であるが、Cstaticよりも広く使用され、staticは関数名変数名を修飾するためにのみ使用され、structclassのような1つのタイプを修飾するために使用されず、匿名ネーミング空間はこれらに限定されない.
  • 3.匿名ネーミング空間は特殊な状況であるが,用法論理的にはネーミング空間全体の一般的な原則に合致する.

  • 3.ネーミングスペースのまとめ
  • 1.ネーミングスペースの最終目標:グローバル名の競合を解決し、合法的な相互アクセスのメカニズムを提供する.
  • 2.直接用法(文法)、定義方法、宣言方法、3つの使用方法を覚えてください.
  • 3.デフォルトのネーミングスペースと匿名のネーミングスペースは特殊な状況であり、いずれも一貫した原則に合致する特例的な使い方である.
  • 4.ヘッダファイルには一般的にusing宣言が含まれてはいけません.ヘッダファイルのすべての内容が参照されているすべてのファイルにコピーされるため、ヘッダファイルを参照しているソースファイルごとにこの宣言があります.一部のプログラムでは、これらの名前が何気なく含まれているため、予想外の衝突が発生する可能性があります.