将结构放在匿名命名空间中的作用是什么?

T.T*_*.T. 4 c++ oop namespaces object data-structures

可能重复:
为什么使用未命名的命名空间以及它们有什么好处?

查看someones代码,这是他们声明的内容:

namespace {

  struct myStruct {
     int x;
     int y;
  } obj1;

}
Run Code Online (Sandbox Code Playgroud)

..在一个函数我看到它像这样使用:

myStruct& var = obj1;
Run Code Online (Sandbox Code Playgroud)

(注意namespace是匿名的.)

从我如何使用它,我无法弄清楚为什么它被声明和使用这样.

宣布这样做的做法有何不同?

另外,为什么指针是这样创建的而不是这里显示的传统样式.即myStruct*ptr;

谢谢!

Ker*_* SB 9

在匿名命名空间内声明的所有内容都会获得唯一的,不可知的名称,因此无法从任何其他翻译单元引用.因此,匿名命名空间仅保证是当前翻译单元的本地名称空间,并且永远不会与另一个名称空间冲突.

例如,如果您说namespace { int i; },您可以保证只有当前翻译单元才能看到全局i.即使此声明位于包含在多个不同TU中的标头中,每个TU也会收到自己的全局变量副本(每个变量都具有不同的,不可知的完全限定名称).

这种效果类似于static在C++ 03中声明一个全局对象(它提供全局对象内部链接),其中匿名命名空间中的对象可能仍然具有外部链接.在C++ 11中,未命名的命名空间中的名称按照3.5/4具有内部链接,因此变量和函数的效果与声明它们完全相同static- 但内部链接不仅适用于变量和函数(例如枚举,类,模板),所以从C++ 11开始,你应该总是喜欢未命名的命名空间!


归档时间:

查看次数:

1974 次

最近记录:

12 年 前