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

举报
王博Kings 发表于 2020/12/30 00:16:40 2020/12/30
【摘要】 目录 名称空间 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 编译指令和u...

目录

名称空间

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


  
  1. namespace Jack{
  2. double pail;
  3. void fetch();
  4. int pal;
  5. struct Well { ... };
  6. }
  7. namespace Jill{
  8. double bucket(double n) { ... }
  9. double fetch;
  10. int pal;
  11. struct Hill { ... };
  12. }

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

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

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 名称空间的其他特性!

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/97105781

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。