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

什么时候在C ++中使用未命名的名称空间? 在任何意义上而不是自由职业是否更好? 另外,它应该只用于源文件,而不是在头文件?

根据Stroustrup的说法,你应该在旧C的地方使用static全局variables。 这个想法是,有问题的项目可以是他们所在的源文件的“全局”,但不会污染编译中任何其他源文件的命名空间。

换句话说, 你不应该在C ++中创buildstatic全局variables 。 您应该使用未命名的名称空间。

我发现了一些在头文件中有用的情况,但是这应该是很less见的。 大多数情况下,我认为是为了声明可抛出的exception。 在这种情况下,所涉及的定义对于包含头部的所有内容来说都是全局的,而对于那些不包含这些头部的东西则是全局的。

未命名的命名空间对于翻译单元来说是私有的,并且这可以用来在不同的翻译单元中使用相同名称来屏蔽全局variables和function,从而不会出现链接冲突。

例如,您需要一个只能在.cpp文件中定义的类,并且只能在该文件中使用。 你想叫它CModuleLock 。 如果它不在一个未命名的命名空间中,而另一些.cpp文件意外地将另一个类CModuleLock不在一个未命名的命名空间中,那么将无法链接您的程序。

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

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

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