目录

名称空间

1. 传统的C++名称空间

1.1 声明区域(declaration region):

1.2 潜在作用域(potential scope):

1.3 作用域(scope):

1.4 声明区域  示意图

1.5 潜在作用域与作用域  示意图

2. 新的名称空间特性

2.1 using声明和using编译指令

2.2 using 编译指令和using声明之比较

2.3 名称空间的其他特性!


 名称空间

1. 传统的C++名称空间

1.1 声明区域(declaration region):

声明区域是可以在其中进行声明的区域。

在函数外面声明的全局变量,其声明区域为其声明所在的文件;对于在函数中声明的变量,声明区域为其声明所在代码块。

1.2 潜在作用域(potential scope):

变量的潜在作用域从声明点开始,到其声明区域的结尾。潜在作用域比声明区域小,因为先定义后使用。

1.3 作用域(scope):

变量对程序而言可见的范围称为作用域。

变量并非在其潜在作用域的任意位置都可见:它可能被另一个嵌套声明区域中的同名变量隐藏。

1.4 声明区域  示意图

1.5 潜在作用域与作用域  示意图

2. 新的名称空间特性

通过定义一种新的声明区域来创建命名的名称空间,这样做的目的之一是提供一个声明名称的区域。

一个名称空间不会与另一个名称空间的相同名称发生冲突

使用namespace 创建了两个名称空间:Jack Jill

namespace Jack{
    double pail;
    void fetch();
    int pal;
    struct Well { ... };
}

namespace Jill{
    double bucket(double n) { ... }
    double fetch;
    int pal;
    struct Hill { ... };
}

名称空间是全局的,也可以位于另一个名称空间中,但不能位于代码块中。

默认情况下,名称空间中的名称链接性为外部。(除非引了常量)

0 全局名称空间:对应与文件级声明区域,全局变量被描述位于全局名称空间中。

名称空间不会发生冲突:Jack里面的fetch 可以与 Jill 中的fetch共存;Jill中的Hill可以与外部Hill共存。

2.1 using声明和using编译指令

using声明使特定的标识符可用,using编译指令使整个名称空间可用。

using声明由被限定的名称加关键字using组成:

using Jill :: fetch;

2.1.1 using 声明将特定的名称添加到它所属的声明区域中。 

2.1.2 在函数外面使用Using声明时,将名称添加到全局名称空间中

2.1.3 全局声明区域使用Using编译,使得该名称空间的名称全局可用

2.2 using 编译指令和using声明之比较

2.3 名称空间的其他特性!

更多推荐

【C++】名称空间:传统的C++名称空间+using namespace如何使用?using编译指令与using声明比较