重複の可能性:
C++ 名前空間に関する質問
名前空間が存在しない例をいくつか見てきました。その利点は何ですか?
::fn
グローバル名前空間fn
で呼び出されるものを指します。
は、グローバル名前空間内の::fn
何かを参照します (絶対パスです)。using <obj>;
またはusing namespace <name>
;を使用してグローバル名前空間にインポートできることに注意してください。
はnamespace::fn
、現在の名前空間に関連する名前空間内の何かを参照します (これは相対パスです)。
namespace X
{
namespace Y
{
int Z()
{
N::fn();
// Compiler looks for
// ::X::Y::N::fn()
// ::X::N::fn()
// ::N::fn()
//
// The search is done in that order the first found
// is used. Note this is done at compile time only.
::fn(); // Absolute path. No search done.
// looks for `fn()` in the global namespace
fn(); // Relative path no namespace
// Searchs for ::X::Y::fn()
// ::X::fn()
// ::fn()
::X::fn(); // Absolute path no search done.
// looks for `fn()` in the namespace X which must be
// in the global namespace.
}
}
}
::fn
この名前の 2 つの変数があり、1 つは関数内で宣言され、もう 1 つはグローバル スコープで宣言されている場合に使用します。::fn
したがって、その関数内 (ローカル fn が宣言されている場所) でグローバル fn を処理する場合は、それらを区別するために呼び出す必要があります。
int fn = 5;
int main (int argc, char *argv[])
{
int fn = 10;
std::cout << "local fn is " << fn << " global fn is " << ::fn;
return 0;
}