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

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

相关推荐
nbplus_0073 分钟前
golang扩展 日志库ZAP[uber-go zap]切割 natefinch-lumberjack
开发语言·后端·golang·个人开发·日志切割·logger
GSDjisidi4 分钟前
日本IT-SIER/SES的区别详情、契约形态等
java·大数据·c语言·c++·php
划过手的泪滴t7 分钟前
【python】字典、列表、集合综合练习
开发语言·python·云计算·每日一练·数据类型
arsiya_jerry8 分钟前
使用nodejs输出著作权申请所需的word版源码
开发语言·node.js
YoungMLet11 分钟前
【QT】多元素控件
c语言·开发语言·c++·qt·ui
F_D_Z20 分钟前
R&RStudio 下载及安装(详尽版)
开发语言·r语言·rstudio
万界星空科技41 分钟前
介绍一款Java开发的商业开源MES系统
java·开发语言·经验分享·科技·5g·开源·制造
Dalao_zzl1 小时前
C语言实现的冒泡排序算法的示例程序
c语言·算法·排序算法
PhyliciaFelicia1 小时前
空间数据采集与管理:为什么选择ArcGISPro和Python?
开发语言·python·深度学习·机器学习·arcgis·数据分析
paidaxing_s1 小时前
【FFMPEG基础(一)】解码源码
linux·c++·ffmpeg