C++ Primer 5th笔记(chap 18 大型程序工具)未命名的命名空间unnamednamespace

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 18 大型程序工具)未命名的命名空间unnamednamespace相关的知识,希望对你有一定的参考价值。

1. 定义

关键字 namespace 后紧跟花括号括起来的一系列声明语句

1.1 生命周期

未命名的命名空间中定义的变量拥有静态生命周期: 它们在第一次使用前创建, 并且直到程序结束才销毁

未命名的命名空间取代文件中的static 静态声明

1.2 多个文件

每个文件定义自己的未命名的命名空间,如果两个文件都含有未命名的命名空间,则这两个空间互相无关。

  • 在这两个未命名的命名空间里面可以定义相同的名字,并且这些定义表示的是不同实体。

  • 如果一个头文件定义了未命名的命名空间,则该命名空间中定义的名字将在每个包含了该头文件的文件中对应不同实体。

  • 和其他命名空间不同,未命名的命名空间仅在特定的文件内部有效,其作用范围不会横跨多个不同的文件。

1.3 作用域

如果未命名的命名空间定义在文件的最外层作用域中, 则该命名空间中的名字一定要与全局作用域
中的名字有所区别

int i; / / i的全局声明
namespace {
   int i;
}

// 二义性: i的定义既出现在全局作用城中, 又出现在未嵌套的未命名的命名空间中
i = 10;

//一个未命名的命名空间也能嵌套在其他命名空间当中。 此时, 未命名的命名空间中的成员
可以通过外层命名空间的名字来访问:
namespace local {
	namespace {
		int i;
	}
}

// 正确: 定义在嵌套的未命名的命名空间中的i与全局作用域中的i不同
local::i=42;

以上是关于C++ Primer 5th笔记(chap 18 大型程序工具)未命名的命名空间unnamednamespace的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 18 大型程序工具)noexcept

C++ Primer 5th笔记(chap 18 大型程序工具)异常处理

C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常

C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性

C++ Primer 5th笔记(chap 18 大型程序工具) 重载与命名空间

C++ Primer 5th笔记(chap 18 大型程序工具)构造函数与虚继承