C++ 命名空间问题

标签 c++ namespaces

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

namespace NsA { namespace NsB { namespace NsC {

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

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

我不明白第 3 行和第 8 行命名空间命令的用途。
谁能解释一下没有名字的命名空间条目的目的是什么?
谢谢

最佳答案

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

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

关于C++ 命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/317719/

相关文章:

c++ - const 函数的编译器错误

c++ - TVirtualStringGrid CopyToClipboard 问题 Embarcadero Seattle C++

c++ - 在 Windows CE DLL 中使用 __stdcall 和 __cdecl

python - 如何在 Flask 应用程序中设置 api 前缀?

azure - 我可以拥有多少个 eventhub 命名空间?

c++ - 使用 c++(SDL2) 的突破游戏 - 试图让球改变轨迹但有一些问题

xml - 将命名空间添加到 org.apache.camel.model.language.ExpressionDefinition.xpath(),默认命名空间不起作用

c++ - 在哪里为 tr1::array 添加重载运算符?

asp.net - 将 ASP.NET 页面批量移动到新的命名空间?

c++ - 究竟为什么编译器直到运行时才能确定变量的真实类型?