可能的重复:
为什么使用未命名的命名空间以及它们有什么好处?
查看某人的代码,这就是他们声明的内容:
namespace {
struct myStruct {
int x;
int y;
} obj1;
}
..在一个函数中我看到它是这样使用的:
myStruct& var = obj1;
(Notice namespace
是匿名的。)
从我如何看待它的使用来看,我无法弄清楚为什么它是这样声明和使用的。
这样声明有何不同?
另外,为什么指针是这样创建的而不是传统的样式此处显示。即 myStruct *ptr;
谢谢你!
匿名命名空间内声明的所有内容都有一个唯一的、不可知的名称,因此不能从任何其他翻译单元引用。因此,保证匿名名称空间仅对于当前翻译单元而言是本地的,并且永远不会与其他翻译单元发生冲突。
例如,如果你说namespace { int i; }
,保证只有当前翻译单元才能看到全局i
。即使此声明位于多个不同 TU 中包含的标头中,每个 TU 也会收到其own全局变量的副本(每个变量都有一个不同的、不可知的完全限定名称)。
效果类似于声明一个全局对象static
(它提供了全局对象内部链接)在 C++03 中,其中匿名命名空间中的对象仍可能具有外部链接。在 C++11 中,未命名命名空间中的名称按照 3.5/4 具有内部链接,因此变量和函数的效果与声明它们的效果完全相同static
– 但内部链接不仅仅适用于变量和函数(例如枚举、类、模板),因此从 C++11 开始,您应该始终更喜欢未命名的命名空间!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)