0

重複の可能性:
C++ 名前空間に関する質問

名前空間が存在しない例をいくつか見てきました。その利点は何ですか?

4

3 に答える 3

8

::fnグローバル名前空間fnで呼び出されるものを指します。

于 2013-01-20T16:09:02.393 に答える
5

は、グローバル名前空間内の::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.
           }
     }          
 }
于 2013-01-20T16:17:51.543 に答える
2

::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;

}
于 2013-01-20T16:18:43.120 に答える