【C++】从认识using namespace std开始进入C++的学习

news2025/2/28 3:34:54

👀樊梓慕:个人主页

 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》

🌝每一个不曾起舞的日子,都是对生命的辜负


📣📣📣今天博主就正式开始学习C++啦,感谢大家在C语言阶段的一路陪伴📣📣📣

🌠编程之路刚刚开始🌠

🚨革命尚未成功,同志仍需努力🚨


目录

前言

1.命名空间

2.怎样使用命名空间

3.using namespace std的作用

4.什么场景下适合展开标准库命名空间

5.std命名空间的使用惯例


前言

很多人在刚刚开始学习C++的时候,老师一般会让大家直接加上这样一段代码:

using namespace std;

 可究竟为什么要加上这段代码??

也许你的老师并没有展开细讲

那么今天,博主就会从这一最初的疑惑开始,与大家一起进入C++的学习。


欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。

=========================================================================

GITEE相关代码:🌟fanfei_c的仓库🌟

=========================================================================


1.命名空间namespace

学习到现在的阶段,大部分人可能还没有接触甚至没有见过比较大型的项目。

在一些大型项目中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。

通俗的讲,就是重名。

C++之父·本贾尼在设计C++语言时就发现了这一问题,命名空间就是他提出的解决方案。

namespace顾名思义就是命名空间,在C++中namespace是一个关键字,就像整型int,字符型char一样。

也就是说,本贾尼为了避免命名冲突或名字污染等问题,专门写了一个关键字namespace,将变量、函数和类的名称可以放在一个空间里,从而就解决了重名的问题。


🔎那么我们接下来就来看一看命名空间是如何使用的🔍


2.怎样使用命名空间

首先命名空间中可以定义变量/函数/类型,比如

namespace f1
{
	//变量
	int rand = 10;
	//函数
	int Add(int left, int right)
	{
		return left + right;
	}
	//类型
	struct Node
	{
		struct Node* next;
		int val;
	};
}

 其次命名空间可以嵌套,比如

namespace f1
{
	int a;
	int b;
	int Add(int left, int right)
	{
		return left + right;
	}
    //嵌套
	namespace f2
	{
		int c;
		int d;
		int Sub(int left, int right)
		{
			return left - right;
		}
	}
}

在同一工程中,如果存在多个相同名称的命名空间,程序在执行时,会将他们合并,比如

// test.h
namespace f1
{
	int Mul(int left, int right)
	{
		return left * right;
	}
}
// test.c
namespace f1
{
	int a;
	int b;
	int Add(int left, int right)
	{
		return left + right;
	}
	namespace f2
	{
		int c;
		int d;
		int Sub(int left, int right)
		{
			return left - right;
		}
	}
}

注意:大家可以将命名空间理解为作用域,一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。


如何使用命名空间中的变量、函数和类型呢


有三种方式可以使用命名空间中的内容:

(1)加命名空间名称作用域限定符::

int main()
{
	printf("%d\n", N::a);
	return 0;
}

(2)使用using将命名空间中某个成员引入

using N::b;
int main()
{
	printf("%d\n", N::a);
	printf("%d\n", b);
	return 0;
}

(3)使用using namespace 命名空间名称 引入

using namespce F;
int main()
{
	printf("%d\n", F::a);
	printf("%d\n", b);
	Add(10, 20);
	return 0;
}

3.using namespace std的作用

了解了上面的内容,using与namespace你就都应该了解了。

现在的问题就剩下std是什么了。

std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中。

也就是说,using namespace std就是上面讲解命名空间的使用中的第三个方式罢了。

 我们可以理解为展开,将该命名空间展开,使该命名空间中的变量、函数和类型名称暴露出来。

using namespace std的意思就是将C++标准库展开,让我们可以使用里面的各种变量、函数和类型。


4.什么场景下适合展开标准库命名空间

你一定想到了,展开命名空间是一件很不安全的做法,因为本贾尼起初设计命名空间的本意就是为了让命名空间内部的变量、函数和类型名称不冲突或不被污染。

 那么如何展开std从而让使用更加合理呢?

  1. 在日常练习中,建议直接using namespace std即可,这样很方便。
  2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 + using std::cout展开常用的库对象/类型等方式。

🔑🔑​​​​​​​🔑​​​​​​​那么看到这里,你的疑惑是否被解答了呢🔑🔑🔑

🌝如果有任何问题,欢迎在评论区提出,博主看到一定会认真回复的🌝


=========================================================================

如果你对该系列文章有兴趣的话,欢迎持续关注博主动态,博主会持续输出优质内容

🍎博主很需要大家的支持,你的支持是我创作的不竭动力🍎

🌟~ 点赞收藏+关注 ~🌟

========================================================================= 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1087256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI秘籍:助您提升办公和学习效率

AI产品在提升办公和学习效率上可是有一手呢!看看下面这些实用的AI产品,让你分分钟变成效率达人! 1. 语音助手:不论是Siri、Cortana还是小冰,一个简单的语音指令就能帮你执行任务,比如发邮件、设提醒、查资料…

九、【裁剪工具组】

文章目录 裁剪工具透视裁剪工具切片工具切片选择工具 裁剪工具 使用裁剪工具,可以将目标图像裁剪成任意我们所需要的大小;使用时按住shift键可以根据对角线来定义裁剪图像的大小,按住ALT键,可以根据等比例大小来裁剪图像。 拉直…

11. SpringBoot项目中参数获取与响应

SpringBoot项目中参数获取与响应 1. 程序结构&通信方式 程序结构: C/S : 客户端/服务器端 -Main方法。 -效果炫目、数据相对安全。 -公司成本高,因为要分别开发客户端和服务器端。 B/S: 浏览器端/服务器端 -效果依赖于浏览…

【网络安全 --- 靶场搭建】sqlserver SQL注入靶场搭建(提供资源)

一,资源下载地址 百度网盘资源下载链接: 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.bai…

tcp/ip协议2实现的插图,数据结构2 (9 - 章)

(20) 20 九章1 IP选项处理 ip_dooptions (21)

qq视频录制教程,让你的视频更加精彩

“qq视频可以录制吗?浏览qq的时候发现一段有趣的视频,点击下载却一直显示失败,朋友叫我把视频录制下来,但是我不知道怎么操作,想问问大家,有没有办法录制qq的视频。” 在信息化的时代,通过视频…

C# Sqlite数据库的搭建及使用技巧

C# Sqlite数据库的搭建 前言: 今天我们来学一下Sqlite的数据库的搭建,Sqlite数据库不比MySqL数据库,SQlite数据是一个比较轻量级的数据库,SQLite提供了比较多的工具集,对数据基本上不挑,什么数据都可以处理&#xff…

Vue2 +Element UI 表格行合并

如果相邻数据是一致的&#xff0c;则单元格的行合并,指定需要合并的列&#xff0c;下面我是指定合并了分类和类型这两列。 先看效果 Element UI为我们的<el-table>提供了一个属性span-method&#xff1a;合并行或列的计算方法 下面是一个示例: html部分 - 主要是在表上指…

安装项目运行环境(python依赖包+allure)

目录 一、安装自动化项目依赖包1.导出项目依赖库2.上传到远程仓库3.进入jenkins容器内&#xff0c;检查是否安装git4.配置git用户信息5.生成秘钥6.把代码拉取下来7.安装python项目依赖8.运行项目 二、安装allure1.jenkins容器内安装allure&#xff0c;进入/usr/local/2.下载all…

Umi + React + Ant Design Pro + TS 项目搭建

新建项目目录 mkdir 【项目名称】在对应目录 D:\react\demo 中&#xff0c;安装 Umi 脚手架&#xff1a; yarn create umi接下来&#xff0c;安装将要用到的相关依赖 umijs/plugins&#xff1a; npm i umijs/plugins -Dumijs/plugins 是 Umi 的官方插件集&#xff0c;包含了…

在 TensorFlow 中调试

如果调试是消除软件错误的过程&#xff0c;那么编程一定是添加错误的过程。Edsger Dijkstra。来自 https://www.azquotes.com/quote/561997 一、说明 在这篇文章中&#xff0c;我想谈谈 TensorFlow 中的调试。 在之前的一些帖子&#xff08;此处、此处和此处&#xff09;中&…

RK3568平台开发系列讲解(驱动篇)Linux自带LED子系统驱动实验

🚀返回专栏总目录 文章目录 一、LED 驱动使能二、 Linux 内核自带 LED 驱动简介2.1、LED 灯驱动框架分析2.2、module_platform_driver 函数简析2.3、gpio_led_probe 函数简析三、设备树节点编写四、测试沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我们以前都是自…

UE5中双pass解决半透明材质乱序问题

透明度材质乱序问题一直是半透明效果时遇到的比较多的问题&#xff0c;用多pass方案只能说一定程度上解决&#xff0c;当遇到多半透明物体穿插等情况时&#xff0c;仍然不能完美解决。 双pass方案Unity用的比较多&#xff0c;因为Unity支持多个pass绘制。在UE中我们可以以复制多…

【开源】给ChatGLM写个,Java对接的SDK

作者&#xff1a;小傅哥 - 百度搜 小傅哥bugstack 博客&#xff1a;bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。 清华大学计算机系的超大规模训练模型 ChatGLM-130B 使用效果非常牛&…

【Qt之QTableWidget和QTreeWidget】树悬停、选择样式及表格表头和首行间隔线

QTableWidget设置表头与首行间隔线 win10 实例化QTableWidget后&#xff0c;表格表头和首行中间无间隔线&#xff0c;以下是通过样式表进行设置&#xff1a; // 设置横向表格头的间隔线&#xff0c;可设置四个方向的间隔线,不需要间隔线的可以设置为0px// border-left:0px sol…

同城本地顺风车微信小程序源码系统,前端+后端完整搭建教程

大家好&#xff0c;今天要给大家分享一款同城本地顺风车微信小程序源码系统&#xff0c;同城本地顺风车微信小程序源码系统是一种基于互联网和移动社交平台的顺风车服务系统&#xff0c;搭建起来也十分简单。 系统特色功能一览&#xff1a; 地图定位&#xff1a;用户可以通过地…

C#中的Dispatcher:Invoke与BeginInvoke的使用

Dispatcher是.NET框架中的一个重要概念&#xff0c;用于处理异步消息传递。在C#中&#xff0c;Dispatcher提供了两种方法&#xff1a;Invoke和BeginInvoke&#xff0c;用于控制线程上消息的顺序和执行方式。 目录 一、Dispatcher.Invoke二、Dispatcher.BeginInvoke三、使用场景…

极简c++(4)类的静态成员

静态数据成员 ::是作用域操作符&#xff01; #include<iostream> using namespace std;class Point{private:int x,y;public:point(int x 0,int y 0):x(x),y(y){}~point();int getX(){return x;}int getY(){return x;} }假设需要统计点的个数&#xff0c;考虑添加一个…

Krypton控件组使用之KryptonRibbon

1.去掉File按钮 2.去掉 Cutomize 菜单

安规电容总结

安规电容 顾名思义&#xff1a;电容即使失效后&#xff0c;也不会漏电或者放电伤人&#xff0c;要符合安全规定 多数高压认证产品都需要。 上图&#xff1a; X电容&#xff1a; Y电容&#xff1a; 区别&#xff1a; 电路示意&#xff1a;