命名空间和自由函数
Namespaces and free functions
我有一个自由函数,foo
,在命名空间 N 中定义。foo
的 header 在全局包含搜索路径中,因此任何人都可以通过包含 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
我应该将 foo1
放在未命名的命名空间中还是放在 namespace N
中?还是不重要?
更新
我想将 foo1
的范围限制为 foo.cpp
。
这不是全局命名空间,而是匿名命名空间。在那里定义它只允许 foo1
在那个翻译单元中使用,所以你不能在其他地方声明它然后再使用它。
这将有效地将其范围限制在 foo.cpp
。如果这是您的意图,请在匿名命名空间中声明它。
如果您希望能够从外部使用它,请在全局命名空间或 N
中声明它(全局命名空间意味着您只需将它保留在命名空间之外)- 取决于它在哪里有意义。
void global_foo();
namespace
{
void internal_linkage_foo();
}
namespace X
{
void foo_from_x();
}
我有一个自由函数,foo
,在命名空间 N 中定义。foo
的 header 在全局包含搜索路径中,因此任何人都可以通过包含 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
我应该将 foo1
放在未命名的命名空间中还是放在 namespace N
中?还是不重要?
更新
我想将 foo1
的范围限制为 foo.cpp
。
这不是全局命名空间,而是匿名命名空间。在那里定义它只允许 foo1
在那个翻译单元中使用,所以你不能在其他地方声明它然后再使用它。
这将有效地将其范围限制在 foo.cpp
。如果这是您的意图,请在匿名命名空间中声明它。
如果您希望能够从外部使用它,请在全局命名空间或 N
中声明它(全局命名空间意味着您只需将它保留在命名空间之外)- 取决于它在哪里有意义。
void global_foo();
namespace
{
void internal_linkage_foo();
}
namespace X
{
void foo_from_x();
}