C++ 中未命名命名空间的使用[重复]

问题描述 投票:0回答:4

什么时候会在 C++ 中使用未命名的命名空间?它在任何意义上都比独立功能更好吗?另外,它应该只在源文件中使用而不是在头文件中吗?

c++ namespaces
4个回答
66
投票

根据 Stroustrup 的说法,您应该在旧 C 中创建

static
全局变量的地方使用它。这个想法是,有问题的项目对于它们所在的源文件来说可以是“全局”的,但不会污染编译中任何其他源文件的命名空间。

换句话说,你不应该在C++中创建

static
全局变量。您应该改用未命名的命名空间。

我发现在某些情况下它们在头文件中很有用,但这应该很少见。我主要认为是声明可抛出异常。在这种情况下,所讨论的定义对于

#include
是该标头的所有内容都是全局的,但对于不是标头的内容则不是。


29
投票

未命名命名空间是翻译单元私有的,这可以用来屏蔽不同翻译单元中出现的同名全局变量和函数,这样就不会出现链接冲突。

例如,您需要一个仅在 .cpp 文件中定义并仅在该文件中使用的类。你想称它为

CModuleLock
。如果它不在未命名的命名空间中,并且其他某个 .cpp 文件意外地具有另一个类
CModuleLock
不在未命名的命名空间中,您将无法链接您的程序。


11
投票

它用于隐藏名称。每个未命名的命名空间都是唯一的。链接here有更详细的解释。它通常在源文件中用于隐藏只应具有内部链接的函数(例如不暴露给外界)。


1
投票

未命名命名空间是全局静态变量和函数的“C++ 版本”。请注意,您还可以对类使用未命名的命名空间。

© www.soinside.com 2019 - 2024. All rights reserved.