什么时候在C ++中使用未命名的命名空间?从某种意义上说,它比独立功能更好吗?另外,应该仅在源文件中使用它,而不在头文件中使用它吗?
Answers:
根据Stroustrup的说法,应该在使用旧C语言创建static
全局变量的地方使用它。这样的想法是,所讨论的项目可以是它们所在的源文件的“全局”对象,但不会污染编译中任何其他源文件的名称空间。
换句话说,您不应该static
在C ++中创建全局变量。您应该改用未命名的名称空间。
我发现在某些情况下它们在头文件中很有用,但是这种情况很少见。我通常认为是要声明可抛出的异常。在那种情况下,所讨论的定义将是针对#include
该标头的所有内容的全局定义,而不是针对不包含此内容的所有内容的全局定义。
static
在最新版的FCD(n3225)中不再被标记为已弃用。该委员会认识到,对于单个职能或全球职能而言,它的冗长程度较低。“ grep”也更容易,因为它出现在声明附近,并且不需要解析器。
static
;以及(2)他们永远不会static
由于C兼容性,在这种情况下将其删除,因此弃用它是一个空洞的威胁。
static
。
未命名的名称空间是转换单元的私有属性,可用于屏蔽在不同转换单元中出现的具有相同名称的全局变量和函数,因此不会发生链接冲突。
例如,您需要一个仅在.cpp文件中定义并且仅在该文件中使用的类。你想叫它CModuleLock
。如果它不在一个未命名的命名空间中,并且其他一些.cpp文件意外地在另一个CModuleLock
不在该未命名的命名空间中的类,则您将无法链接程序。
用于名称隐藏。每个未命名的名称空间都是唯一的。此处的链接详细说明。通常在源文件中使用它来隐藏仅应具有内部链接的功能(例如,不暴露给外界)。
基本上,名称空间解决了相同名称类,标识符和函数之间的冲突。有关更多信息,请单击下面给出的链接 https://simplifiedtutorial4u.blogspot.in/2017/08/what-is-namespace-in-c。 html