0

可能重复:
C++ 命名空间问题

我见过几个没有命名空间的例子。这样做有什么好处?

4

3 回答 3

8

::fnfn全局命名空间中调用的东西。

于 2013-01-20T16:09:02.393 回答
5

::fn引用全局命名空间中的某些东西(它是一个绝对路径)。using <obj>;请注意,您可以使用or将内容导入全局命名空间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,一个在函数内声明,另一个在全局范围内。因此,如果您想处理该函数内部的全局 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 回答