何时会使用C++中的未命名命名空间?在任何意义上而不是独立职能都更好?另外,它只能用于源文件而不用于头文件吗?C++中未命名命名空间的使用
回答
据Stroustrup的,你应该在在旧的C,你会作出static
全局的地方使用它。这个想法是,所讨论的项目可以对它们所在的源文件是“全局”的,但不会污染编译过程中任何其他源文件的命名空间。
换句话说,你不应该在C++中创建static
全局变量。您应该使用未命名的名称空间。
我发现他们是在头文件中有用的一些情况,但应该是罕见的。大多数情况下,我认为是为了声明可抛出的异常。在那种情况下,所讨论的定义对于所有标题都是全球性的,但不适用于那些不适用的东西。
在最新一期的FCD(n3225)中'static'不再被标记为弃用。该委员会认识到,对于单一职能或全球而言,它不那么冗长。 “grep”也更容易,因为它出现在声明附近,并且不需要解析器。 –
@Matthieu:但这些功能都有内部联系。无名命名空间被称为“优越”的真正原因是它们“隐藏”符号而不是改变对象/函数的链接,这与人们通常在使用它时想要实现的内容更接近。这在C++ 0x中没有改变,他们已经认识到(1)如果你担心外部链接会很昂贵,那么你需要内部链接,这反过来意味着你想要'静态',和(2)他们由于C兼容性,在这种情况下永远不会删除'static',所以贬低它是一个空洞的威胁。 –
@Steve:我期待它也改变了联系,如果没有人知道符号,维持它的目标是什么? –
它用于名称隐藏。每个未命名的名称空间都是唯一的。链接here更详细地解释。它通常用于源文件中以隐藏仅应该具有内部链接的功能(例如,不暴露于外部世界)。
具名命名空间是私有的翻译单元,这可以用来屏蔽全局变量和函数在不同的翻译单元中出现的,这样没有链接发生冲突相同的名称。
例如,你需要将只在一个.cpp文件中定义,并仅在该文件中使用的类。你想叫它CModuleLock
。如果它不在未命名的命名空间中,并且其他一些.cpp文件意外地将另一个类CModuleLock
不在未命名的命名空间中,那么将无法链接您的程序。
我有时使用未命名空间的类,可能是私有的内部类,但我想类似的类之间共享(也许那些实施相同概念的人)。当然,如果这个类变得足够普遍,我将把它移动到一个命名的命名空间 – RichardBruce
未命名空间是全局静态变量和函数的“C++版”。请注意,您也可以使用未命名的名称空间作为类。
基本上,命名空间解决同一名称之间的冲突类,标识符和function.for更多信息,请单击下面 https://simplifiedtutorial4u.blogspot.in/2017/08/what-is-namespace-in-c.html
- 1. 命名空间路线中的未命名空间路线
- 2. C++命名空间....匿名命名空间是合法的?
- 3. C++中的命名空间
- 4. C++中的命名空间
- 5. C#中的命名空间#
- 6. c中的命名空间#
- 7. c中的命名空间#
- 8. C++命名空间
- 9. 全局命名空间中的命名空间C#
- 10. 利用C#中的内置命名空间使用内置命名空间
- 11. 从匿名命名空间调用命名命名空间中的函数
- 12. 一些关于C++未命名的命名空间
- 13. 从一个命名空间扩展的未命名空间类
- 14. 命名空间用C
- 15. C++中的命名空间别名
- 16. 重命名命名空间
- 17. C#完全限定的命名空间与小命名空间
- 18. 使用System.Drawing命名空间的C++
- 19. 未命名的名称空间
- 20. 是“使用命名空间”是指加载该命名空间
- 21. 使用dom4j添加命名空间和命名空间前缀
- 22. XSD命名空间到C#命名空间
- 23. 在未命名的命名空间中声明变量
- 24. 命名空间'std'中的'vector'未命名类型
- 25. 命名空间中不存在命名空间名称'Notify'Twilio.Rest
- 26. 在.net中重命名命名空间
- 27. 在MonoTouch中重命名命名空间
- 28. C++库创建使用命名空间
- 29. C++ begineer:使用命名空间错误
- 30. C++命名空间:交叉使用
给出的链接,请参阅本主题也:?具名命名空间的静态以上优势( http://stackoverflow.com/questions/4422507/superiority-of-unnamed-namespace-over-static) – Nawaz