[知识点] 1.4.4 命名空间

总目录 > 1  语言基础 > 1.4  C++ 语言基础 > 1.4.4  命名空间

前言

  可能是目前最简短的一篇?因为实在不知道可以和哪一篇一起讲了。

 

更新日志

  20200903 - 增加作用域和全局/局部变量的介绍。

  20211023 - 作用域、全局/局部变量等内容移至 1.2 C 语言进阶

 

1.4.4  命名空间

  C++ 另一大特性 —— 命名空间(namespace),用来解决复杂项目中名字可能出现冲突的问题——比如某项目由 jk 和 bebe 共同完成,而他俩在定义变量名时总是重复,比如都使用了 vis 作为标记数组,那么就可以使用 namespace 来对各自的工作空间进行切割:

 1 #include <bits/stdc++.h>
 2 
 3 namespace jk {
 4     int vis[20];
 5 }
 6 
 7 namespace bebe {
 8     int vis[20];
 9 }
10 
11 int main() {
12     jk :: vis[1] = 1;
13     bebe :: vis[1] = 0;
14     return 0;
15 }

  当然并非每次都需要强调这是谁的 vis。使用 “using namespace ” + 空间名,相当于是划分地盘:

 1 #include <bits/stdc++.h>
 2 
 3 namespace jk {
 4     int vis[20];
 5 }
 6 
 7 namespace bebe {
 8     int vis[20];
 9 }
10 
11 int main() {
12     using namespace jk;
13     vis[1] = 1;
14     bebe :: vis[1] = 0;
15     return 0;
16 }

  这里表示,主程序这一块都是 jk 的,jk 住在这里了,那么他自己的东西就不用再强调是谁的了,vis[1] 等价于 “jk :: vis[1]”,而外人 bebe 仍需标明。

  所以,平时竞赛最常用的 using namespace std 是指什么?是 C++ 默认提供的一套标准命名空间,里面包含 cin, cout, endl, ... 等等。

  当然,除了上述这样允许访问某命名空间的任何成员,也可以选择仅访问其中一个成员,比如 using std :: cin,等等。

 

  在命名空间中可以使用作用域限定符 ::,关于作用域请参见 1.2 C 语言进阶  作用域与存储类别 部分;

  这是 C++ 特有的符号,以解决局部变量与全局变量同名时全局变量会被屏蔽的问题;

  如果我们对某个变量指定了作用域,编译器就会忽略更外层作用域的同名实体。

原文链接: https://www.cnblogs.com/jinkun113/p/12917334.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    [知识点] 1.4.4 命名空间

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/349537

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午5:44
下一篇 2023年3月2日 上午5:45

相关推荐