4

我有一个自由函数,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

我应该放入foo1未命名的命名空间还是放入namespace N?还是没关系?

更新

我想限制 to 的foo1范围foo.cpp

4

1 回答 1

5

这不是一个全局名称空间,而是一个匿名名称空间。在那里定义它只会允许foo1在该翻译单元中使用,因此您不能在其他地方声明它并在之后使用它。

这将有效地将其范围限制为foo.cpp. 如果这是您的意图,请在匿名命名空间中声明它。

如果您希望能够从外部使用它,请在全局命名空间中声明它或N(全局命名空间意味着您只需将其置于命名空间之外) - 取决于它在哪里有意义。

void global_foo();

namespace
{
   void internal_linkage_foo();
}

namespace X
{
   void foo_from_x();
}
于 2015-03-09T09:47:29.800 回答