嵌套的匿名命名空间?

Rob*_*Rob 32 c++ namespaces

使用匿名命名空间时,如果它嵌套在另一个命名空间中会有任何问题吗?例如,在以下代码中Foo1.cpp和Foo2.cpp之间是否存在任何真正的区别:

// Foo.h
namespace Foo
{
    void fooFunc();
}

// Foo1.cpp
namespace Foo
{
    namespace
    {
        void privateFunction()
        {
            ...
        }
    }

    void fooFunc()
    {
        privateFunction();
    }
}

// Foo2.cpp
namespace
{
    void privateFunction()
    {
        ...
    }
}

namespace Foo
{
    void fooFunc()
    {
        privateFunction();
    }
}
Run Code Online (Sandbox Code Playgroud)

Kir*_*sky 31

匿名命名空间可以被视为具有您不知道的唯一名称的普通命名空间.根据C++标准7.3.1.1:

未命名的命名空间定义的行为就像被替换为

  namespace unique { /* empty body */ }
  using namespace unique;
  namespace unique { namespace-body }
Run Code Online (Sandbox Code Playgroud)

其中翻译单元中所有唯一的出现都被相同的标识符替换,并且该标识符与整个程序中的所有其他标识符不同.

没有其他问题.