匿名命名空间的唯一名字是不可见的涵义是什么?

匿名命名空间的唯一名字是不可见的涵义是什么?

1.namespace解决命名冲突问题(可以放函数、变量、结构体、类)

2.命名空间必须在全局范围内定义

3.命名空间可以嵌套命名空间

4.命名空间是开放的,可以随时向命名空间添加内容。

在使用命名空间 A::B 嵌套时可用;

匿名命名空间

定义命名空间时,命名空间名称可以忽略:

命名空间 {

字符 c;

int i;

双d;

}

编译器在内部为命名空间生成一个唯一的名称,并为匿名命名空间生成一个 using 指令。所以上面的代码等效于:

命名空间_UNIQUE_NAME {

字符 c;

int i;

双d;

}

使用命名空间 UNIQUE_NAME;

在匿名命名空间中声明的名称也将由编译器翻译,绑定到编译器为此匿名命名空间生成的唯一内部名称(即此处的 __UNIQUE_NAME)。同样重要的是这些名称有一个内部链接属性,这与声明为静态的全局名称的链接属性相同游戏素材数据报告,即名称的范围仅限于当前文件,不能在另一个文件中使用通过使用 extern 语句进行链接。如果不鼓励使用全局静态来声明具有内部链接属性的名称,则可以使用匿名命名空间作为实现相同效果的更好方法。

注意:命名空间都有外部连接属性,但是匿名命名空间生成的__UNIQUE_NAME__在其他文件中是无法获取的,这个唯一的名字是不可见的。

在新的C++标准中,推荐使用匿名命名空间unity string 类的命名空间,不推荐使用static,因为static用在不同的地方unity string 类的命名空间,含义不同,容易造成混淆。另外,static不能修改class