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