我们可以使用下面代码段中的命名空间吗?代码在gcc和msvc中编译,让我对名称空间使用感到困惑.
在f1.h:
namespace My
{
void foo();
}
在f1.cpp`中
void My::foo()
{
}
我认为该函数应该定义为:
namespace My {
void foo() {}
}
任何人都可以解释一下吗?
谢谢
只要名称以其名称空间的名称为前缀,定义名称空间成员在其名称空间之外是合法的,并且该定义实际上发生在包含它的名称空间中.它不能发生在嵌套在成员命名空间内的命名空间中.
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)
它与类成员相同,只要在名称前加上类的名称,您也可以在类之外定义函数.但是对于类,必须先在其各自的命名空间中声明命名空间成员,然后才能在其外部定义它们.