17

我正在编写一些不再与公司合作的同事编写的代码,我发现了以下代码:(我在下面删减了)

namespace NsA { namespace NsB { namespace NsC {

    namespace { 
        class A { /*etc*/ };
        class B { /*etc*/ };
    }    

    namespace {
        class C { /*etc*/ };
    }
} } }

我不明白第 3 行和第 8 行命名空间命令的目的。
有人可以解释没有名称的命名空间条目的目的是什么吗?
谢谢

4

1 回答 1

36

那是一个“匿名命名空间”——它创建了一个隐藏的命名空间名称,保证每个“翻译单元”(即每个 CPP 文件)都是唯一的。

这实际上意味着该命名空间内的所有项目都隐藏在该编译单元之外。它们只能在同一个文件中使用。另请参阅有关未命名命名空间的这篇文章

于 2008-11-25T15:34:25.097 回答