【C++】using namespace std 到底什么意思

📢博客主页: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 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

相关推荐
敲上瘾7 分钟前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
不会写代码的ys14 分钟前
【类与对象】--对象之舞,类之华章,共绘C++之美
c++
兵哥工控16 分钟前
MFC工控项目实例三十二模拟量校正值添加修改删除
c++·mfc
在下不上天16 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
长弓聊编程26 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
陌小呆^O^30 分钟前
Cmakelist.txt之win-c-udp-client
c语言·开发语言·udp
cherub.33 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
I_Am_Me_1 小时前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
暮色_年华1 小时前
Modern Effective C++item 9:优先考虑别名声明而非typedef
c++
重生之我是数学王子1 小时前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt