C++学習ノート:デフォルトのネーミングスペースと匿名のネーミングスペース
9779 ワード
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デフォルトネーミングスペースの定義
デフォルトネーミングスペースは、グローバルネーミングスペースとも呼ばれ、特定のネーミングスペースに配置されていないすべてのコード、すなわち、デフォルトネーミングスペース、例えば
次の点に注意してください. 1.デフォルトのネーミングスペースもネーミングスペースです. 2.デフォルトのネーミングスペースはグローバルです. 3.
1.2デフォルトのネーミングスペースは他のネーミングスペースを参照する
デフォルトのネーミングスペースが他のネーミングスペースを参照する方法は、前編のネーミングスペースを使用する方法と同じであり、ここではこれ以上は言いません.
1.3デフォルトのネーミングスペースは自分を参照
これは、次のコードの
1.4その他のネーミングスペースはデフォルトのネーミングスペースを参照
他のネーミングスペース参照デフォルトネーミングスペースも同様に
2.匿名ネーミングスペース
2.1匿名ネーミングスペースの定義
匿名ネーミングスペースはグローバルネーミングスペースと似ています.名前はありませんが、グローバルネーミングスペースは自分で定義する必要はありません.匿名ネーミングスペースは自分で定義する必要があります.方法は
2.2匿名ネーミングスペースでの他のネーミングスペースの参照
匿名ネーミングスペースが他のネーミングスペースを引用する方法は、前編のネーミングスペースを使用する方法と同じであり、ここではこれ以上は言わない.
2.3匿名ネーミングスペースでの自己参照
直接使用します.ネーミングスペース名接頭辞を追加する必要はありません.先に宣言した後に使用する順序を確保すれば問題ありません.
2.4その他のネーミングスペースでの匿名ネーミングスペースの参照
一般的な匿名ネーミングスペースは、グローバル関数の場所と同様にファイルの前に定義され、その後のネーミングスペースは匿名ネーミングスペースの内容に正常にアクセスできますが、匿名ネーミングスペースの役割はこれではなく、ファイル間でアクセスする場合にあります.したがって、実際には、単一のファイル内で匿名ネーミングスペースを使用することは、グローバル関数とあまり変わりません.
2.5匿名ネーミングスペースの意味 1.匿名ネーミングスペースのシンボルは、ファイル内部での使用に限定され、外部参照は必要ありません. 2.匿名ネーミング空間効果は、グローバル変数および関数プラス 3.匿名ネーミング空間は特殊な状況であるが,用法論理的にはネーミング空間全体の一般的な原則に合致する.
3.ネーミングスペースのまとめ 1.ネーミングスペースの最終目標:グローバル名の競合を解決し、合法的な相互アクセスのメカニズムを提供する. 2.直接用法(文法)、定義方法、宣言方法、3つの使用方法を覚えてください. 3.デフォルトのネーミングスペースと匿名のネーミングスペースは特殊な状況であり、いずれも一貫した原則に合致する特例的な使い方である. 4.ヘッダファイルには一般的に
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;
}
次の点に注意してください.
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匿名ネーミングスペースの意味
static
と同様であるが、C
のstatic
よりも広く使用され、static
は関数名変数名を修飾するためにのみ使用され、struct
、class
のような1つのタイプを修飾するために使用されず、匿名ネーミング空間はこれらに限定されない.3.ネーミングスペースのまとめ
using
宣言が含まれてはいけません.ヘッダファイルのすべての内容が参照されているすべてのファイルにコピーされるため、ヘッダファイルを参照しているソースファイルごとにこの宣言があります.一部のプログラムでは、これらの名前が何気なく含まれているため、予想外の衝突が発生する可能性があります.