【C++】using namespace std 到底什么意思
📢博客主页:https://blog.csdn.net/2301_779549673
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文作为 JohnKi 的学习笔记,引用了部分大佬的案例
📢未来很长,值得我们全力奔赴更美好的生活✨
文章目录
- 📢前言
- 🏳️🌈什么是 namespace
- 🏳️🌈如何定义 namespace
- ❤️定义
- 嵌套
- 融合
- 🏳️🌈如何使用 namespace
- 👥总结
📢前言
要建造简单的房屋,首先要打地基、搭框架。如果一开始没有牢固的结构,后面就很难建造窗子、门框、圆屋顶和镶木地板的舞厅等。同样,学习计算机语言时,应从程序的基本结构开始学起。只有这样,才能一步一步了解其具体细节,如循环和对象等。
这篇博客,笔者就介绍一下由 C语言 转到 C++ 时,我们第一个会遇到的语句即 using namespace std ,并着重介绍一下其中的含义和由来
🏳️🌈什么是 namespace
Namespace(命名空间)是在计算机科学中常见的概念,用于表示符号的命名范围或作用域。在编程中,命名空间通常用于避免命名冲突,即当多个库、模块或包中存在相同名称的变量、函数或类时,通过将它们放置在不同的命名空间中来区分它们。
我们可以先看一下下面这块C语言的代码
#define _CRT_SECURE_NO_WARNINGS 1 #include #include int rand = 1; int main() { printf("%d", rand); return 0; }
如果不存在什么命名问题的话,这里会出现的结果将是1,但是我们实操会发现出现重定义的错误提示
为什么会出现?
那是因为在stdlib.h库中也存在rand这个变量名
因此
在当项目量过大,项目人数过多时,时常会出现一些大佬们命名重复的情况,为了避免这个情况,于是就在C++中引用了namespace,用来存放和保证命名库不出错,解决命名冲突
🏳️🌈如何定义 namespace
❤️定义
定义语法:
namespace N1 { //支持变量 int a = 1; //支持函数 int fun() { return 1; } //支持结构体 struct S { int s; }; }
我们通过 namespace + 命令空间名 + {} 在花括号中填入想要命名的变量就可以了
基本上的类型都是支持的
嵌套
namespace N2 { int a = 1; namespace N3 { int b = 1; } }
不仅如此namespace是支持嵌套使用的,就比如这里在N2空间内我们又创建了一个N3的命名空间
融合
同一个工程中,允许存在多个相同名称的命名空间,编译器最后会把他们合成一个命名空间。
namespace N4 { int a = 1; } namespace N4 { int b = 2; }
融合结果
namespace N4 { int a = 1; int b = 2; }
🏳️🌈如何使用 namespace
既然已经知道了namespace的定义方法,那自然需要知道如何使用了
这里就可以介绍一下using namespace std的具体含义了
这其实就是一个名为std的命名空间的直接使用,std可以看为C++语法的标准数据命名空间,就像C语言中的stdio.h一样,在C++中常使用的count,cin等都是出自于这个命名库中,C++标准库中的函数或者对象都是在命名空间std中定义的。
我们使用using namespace std就相当于把C++标准库外壳拆除,因此就可以使用里面的对象和函数了
- 这就是方法1直接使用,using namespace + 命名空间名
#include namespace N { int a = 10; int b = 20; } using namespace N; int main() { printf("%d\n", a); // 正常打印 return 0; }
- 而方法2则是使用using将命名空间中成员引入,using + 命名空间名 + :: +成员名
using N::b; int main() { printf("%d\n", b); return 0; }
这样如果仅仅是需要利用命名空间内的指定成员名直接这样引用就行了
- 方法3就是命名空间名 + :: + 变量名
这里可以引用一下全局变量和局部变量
比如下面这个例子
#include int a = 0; int main() { int a = 1; printf("%d\n",a); return 0; }
这部分代码没有出错,因为在指定作用域内,优先局部变量
但如果我们要在这部分域内使用全局变量又该怎么做呢,就需要在变量名前加上::就行了
#include using namespace std; int a = 0; int main() { int a = 1; printf("访问局部变量(a):%d\n",a); printf("访问全局变量(::a):%d\n",::a); return 0; }
那如果在C++中,有很多个命名空间呢,那就是用方法3命名空间名 + :: + 变量名了
#include using namespace std; int main() { cout std::cout
- 方法3就是命名空间名 + :: + 变量名
- 而方法2则是使用using将命名空间中成员引入,using + 命名空间名 + :: +成员名
- 这就是方法1直接使用,using namespace + 命名空间名