命名空间和自由函数

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();
}