在静态之上使用未命名的命名空间
Use of Unnamed namespace over static
我是否可以假设在未命名的命名空间中声明的对象等同于static
?
namespace { int x; };// #1
static int x; // #2
FWIK,在这两种情况下,x
将具有静态存储时间和内部链接。
那么,声明为static
的对象的所有规则是否适用于未命名命名空间中的对象?
例如:
- 建设和破坏的顺序是什么?会是一样的吗?
- 我可以使用
extern
关键字与x
在未命名的命名空间?
你的大部分问题都在这里得到了解答。其余部分:
建设和破坏的顺序是什么?会是一样的吗?
顺序与常规全局变量相同。所以它和静态不一样。
话虽如此,我强烈建议您编写不关心顺序的代码。对于全局变量,越少依赖特定的初始化顺序越好。
我可以在未命名的命名空间中使用extern关键字x吗?
。为了extern
的东西,你必须能够键入它的名称。未命名名称空间的神奇之处在于,您不能键入它的名称。该名称由编译器指定。你不知道。因此,如果您尝试extern
它,您将代替外部的东西。
如果你在头文件中放置了一个未命名的命名空间,每个包含它的翻译单元都会得到该变量的不同版本。它们都是extern
,但它们将讨论一个不同的外部变量
两者都具有内部链接(仅在c++11中未命名命名空间中的链接),但未命名命名空间中的链接不是全局命名空间的成员。例如,你可以在未命名的命名空间和全局命名空间中输入x,它们不会冲突。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 不同C++文件中未命名命名空间中的名称可以引用同一个命名事物吗?
- 如何访问嵌套在命名命名空间中的未命名命名空间变量?
- 编译错误:"error_category"未使用 g++ 6.3.0 命名类型"
- 函数与来自未命名命名空间的参数的链接
- 从匿名名称空间中调用命名名称空间的函数
- G++显示关于未定义命名空间的错误
- Foreward 声明在未命名命名空间中定义的类
- C++,包括未命名命名空间中的头文件
- 字段名称与使用未命名命名空间的字段类型相同
- VS2013 在未命名命名空间中遇到基类问题
- 源文件中的未命名命名空间和局部变量
- 未命名命名空间中名称的外部链接
- Xcode 标头错误 - 命名空间'_STL'未包含命名空间'_Rep'
- 如何在监视窗口中转换为未命名命名空间中的类型
- 当外部命名空间具有具有相同名称的成员时,访问未命名命名空间的成员
- 如何转发声明未命名命名空间中的类
- 定义未指定名称空间的函数指针
- 如何将数组复制到更大的数组中,并在未使用的空间中添加零?C++
- 在c++中命名命名空间的最佳方法//当名称冲突时该怎么做