ksl*_*ksl 3 c++ namespaces global-namespace non-member-functions
我有一个自由函数,foo在名称空间N中定义。的标头foo位于全局包含搜索路径中,因此任何人都可以通过包括来调用它foo.h。
foo调用另一个本地自由函数foo1,该函数在中定义foo.cpp。
// foo.h
namespace N
{
void foo();
}
// foo.cpp
#include "foo.h"
namespace
{
// declare in the unnamed namespace?
void foo1()
{
// do some stuff
}
}
namespace N
{
// declare in namespace N?
void foo1()
{
// do some stuff
}
void foo()
{
foo1();
}
} // N
Run Code Online (Sandbox Code Playgroud)
我应该放入foo1未命名的名称空间还是namespace N?还是没关系?
更新
我想将范围限制foo1为foo.cpp。
那不是全局名称空间,而是匿名名称空间。在此处定义它只能foo1在该翻译单元中使用,因此您不能在其他地方声明它并随后使用它。
这将有效地将其范围限制为foo.cpp。如果您打算这样做,请在匿名名称空间中声明它。
如果您希望能够从外部使用它,请在全局命名空间中声明它N(或(全局命名空间意味着您只是将其保留在命名空间之外))-视其合理性而定。
void global_foo();
namespace
{
void internal_linkage_foo();
}
namespace X
{
void foo_from_x();
}
Run Code Online (Sandbox Code Playgroud)