没有命名空间的“namespace :: fn”和“:: fn”有什么区别?

时间:2013-01-20 16:08:08

标签: c++

  

可能重复:
  C++ namespace question

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

3 个答案:

答案 0 :(得分:8)

::fn指的是全局命名空间中名为fn的内容。

答案 1 :(得分: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.
           }
     }          
 }

答案 2 :(得分: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;

}