在C ++中使用未命名的命名空间

时间:2011-03-15 13:12:44

标签: c++ namespaces

何时在C ++中使用未命名的命名空间?在任何意义上它比独立功能更好吗?是否应该仅在源文件中使用而不是在头文件中使用?

5 个答案:

答案 0 :(得分:59)

根据Stroustrup的说法,你应该在老C的地方使用它,你可以使用static全局变量。我们的想法是,所讨论的项目可以是它们所在源文件的“全局”,但不会污染编译中任何其他源文件的命名空间。

换句话说,你不应该在C ++中创建static全局变量。您应该使用未命名的命名空间。

我发现了一些在头文件中有用的情况,但这种情况应该很少见。我认为主要用于声明可抛出的异常。在这种情况下,所讨论的定义对于#include标题的所有内容都是全局的,但对于没有标题的内容则不是。

答案 1 :(得分:27)

未命名的命名空间对于翻译单元是私有的,这可用于屏蔽全局变量和具有相同名称的函数,这些变量和函数出现在不同的翻译单元中,因此不会出现链接冲突。

例如,您需要一个只在.cpp文件中定义并仅在该文件中使用的类。你想称之为CModuleLock。如果它不在未命名的命名空间中,而某些其他.cpp文件意外地有另一个类CModuleLock不在未命名的命名空间中,则您将无法链接您的程序。

答案 2 :(得分:9)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

基本上,命名空间解决了相同名称类,标识符和函数之间的冲突。有关更多信息,请单击下面给出的链接 https://simplifiedtutorial4u.blogspot.in/2017/08/what-is-namespace-in-c.html