在c ++中使用命名空间

Ven*_*san 2 c++ namespaces

我们可以使用下面代码段中的命名空间吗?代码在gcc和msvc中编译,让我对名称空间使用感到困惑.

在f1.h:

namespace My
{
 void foo();
}

在f1.cpp`中

void My::foo()
{
}

我认为该函数应该定义为:

namespace My {
void foo() {}
}

任何人都可以解释一下吗?

谢谢

Joh*_*itb 8

只要名称以其名称空间的名称为前缀,定义名称空间成员在其名称空间之外是合法的,并且该定义实际上发生在包含它的名称空间中.它不能发生在嵌套在成员命名空间内的命名空间中.

namespace A { void f(); }
void A::f() { } // prefix with "A::"

namespace B { }
void B::f() { } // invalid! not declared in B!

namespace C { void f(); }
namespace D { void C::f() { } } // invalid! D doesn't enclose C

namespace E {
  void f();
  namespace F {
    void E::f() { } // invalid! F is nested inside E!
  }
}
Run Code Online (Sandbox Code Playgroud)

它与类成员相同,只要在名称前加上类的名称,您也可以在类之外定义函数.但是对于类,必须先在其各自的命名空间中声明命名空间成员,然后才能在其外部定义它们.