【C++入门】命名空间详解(从零开始,冲击蓝桥杯)

news2025/1/11 12:47:24

C++入门 命名空间

  • 南喵小鸡汤
  • 程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。
  • 一 . 命名空间的介绍
  • 二.命名空间的实际应用
    • 1.为什么要有命名空间
    • 我们在使用变量时,通常会为他定义一个名字,在一般情况下,我们的命名极少与库里的函数起冲突.但是往往,一旦有了冲突,我们必须为自己所创建的变量重新命名.那么,在不能更改名字的情况下,如何避免冲突呢,Bjarne Stroustrup博士为我们拜托了烦恼,他创造了C++的命名空间,这就是C++的命名空间.
    • 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
    • 2.展开命名空间
    • 在引入这个观点的前提现,我们需要学习一下C++中输入与输出的方式,他们与我们在C中学习的有很大的区别.
  • 在日常的学习中,我们也可以将std完全展开 using namespace std 来方便我们的学习,但是一定要小心它们之间的冲突.
  • 总结


南喵小鸡汤

程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。

一 . 命名空间的介绍


命名空间是一个声明性区域,为其内部的标识符(类型、函数和变量等的名称)提供一个范围。
命名空间用于将代码组织到逻辑组中,还可用于避免名称冲突,尤其是在基本代码包括多个库时。
命名空间范围内的所有标识符彼此可见,而没有任何限制。 命名空间之外的标识符可通过使用每个标识符的完全限定名(例如std::vectorstd::string vec;)来访问成员,也可通过单个标识符的 using 声明(usingstd::string) 或命名空间中所有标识符的 using 指令 (using namespace std;) 来访问成员。头文件中的代码应始终使用完全限定的命名空间名称。

二.命名空间的实际应用


1.为什么要有命名空间

我们在使用变量时,通常会为他定义一个名字,在一般情况下,我们的命名极少与库里的函数起冲突.但是往往,一旦有了冲突,我们必须为自己所创建的变量重新命名.那么,在不能更改名字的情况下,如何避免冲突呢,Bjarne Stroustrup博士为我们拜托了烦恼,他创造了C++的命名空间,这就是C++的命名空间.

为了更直观的表达这一观点,我将用图片加注释的方法变现出来
在这里插入图片描述
在这里插入图片描述

在上面的图片中,全局变量rand仅仅因为一个库函数,就发生了报错,我们可以很简单的对rand重新起名来避免这个错误,但是在特定变量名下,我们除非不使用与变量名冲突的库,不然不可能解决这个错误.但在C++中,我们可以很轻松地解决它
命名空间不止如此

namespace Moon
{
	// 命名空间中可以定义变量/函数/类型
	int rand = 10;
	int Add(int left, int right)
	{
		return left + right;
	}

		struct Node
	{
		struct Node* next;
		int val;
	};
}
namespace N1
{
int a;
int b;
int Add(int left, int right)
{
return left + right;
}
namespace N2
{
int c;
int d;
int Sub(int left, int right)
{
return left - right;
}
}
}//命名空间还可以互相嵌套

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中


2.展开命名空间

在引入这个观点的前提现,我们需要学习一下C++中输入与输出的方式,他们与我们在C中学习的有很大的区别.

cout
用于在计算机屏幕上显示信息,是C++中iostream 类型的对象,C++的输出是用“流”(stream)的方式实现的,流运算符的定义等信息是存放在C++的输入输出流库中的,因此如果在程序中使用cout和流运算符,就必须使用预处理命令把头文件stream包含到本文件中,即库,该库定义的名字都在命名空间 std 中,所以 cout 全称是 std::cout 。

cin
C++编程语言I/O流中的标准输入流,需要包含iostream头文件,即#include
cin代表标准输入设备,使用右移运算符 “>>” 从设备键盘取得数据,送到输入流对象cin中,然后送到内存。使用cin可以获得多个从键盘的输入值,其具体使用格式如下:
cin >> 表达式1 >>表达式2…>> 表达式n;

<< >>
C++的流是通过重载运算符 “<<” 和 “>>” 执行输入和输出操作。 输出操作是向流中插入一个字符序列,因此,在流操作中,将左移运算符 “<<” 称为插入运算符

在这里插入图片描述

虽然cout很方便,很好用,但是每次使用都需要声明std::,未免有些太过于繁琐,至此,我们引出了第二个概念 命名空间展开

在这里插入图片描述
using std::(关键字) 实际上就是告诉编译器,你类型是什么,在哪能找到。

常用的是using std,就是说用C++的标准名字空间。

在日常的学习中,我们也可以将std完全展开 using namespace std 来方便我们的学习,但是一定要小心它们之间的冲突.

总结

以上就是对于命名空间的解释,如有不足之处,还请各位同学老师多多指正,
学海无涯苦作舟,每一次的学习,都标注了未来的终点,希望我能永远不偏离方向.保持学习的初心

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

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

相关文章

graphviz 绘制森林

代码 digraph Forest {node [fontname"Arial", shapecircle, stylefilled, color"#ffffff", fillcolor"#0077be", fontsize12, width0.5, height0.5];edge [fontname"Arial", fontsize10, color"#333333", arrowsize0.5];/…

Node基础概念,先了解一下

Nodejs是基于Chrome V8引擎的服务器端JavaScript运行环境&#xff0c;也就是说可以在浏览器之外的主机上运行JavaScript。 NodeJS Nodejs有三部分组成&#xff1a;标准库、中间层和底层库。 标准库&#xff1a;是给开发人员直接调用的API&#xff0c;比如HTTP模块&#xff1b…

Vulnhub Me-and-My-Girlfriend

一、信息收集 1.nmap 端口扫描 发现开发了22、80 2.访问ip&#xff0c;右击查看源代码 发现需要利用X-Forwarded-For 插件&#xff1a;X-Forwarded-For Header 挂上代理后&#xff1a; 出现以下页面&#xff1a; 先注册一个账户&#xff0c;然后再登录 发现有参数进行传…

C语言系统化精讲(二):C语言数组详解

文章目录 一、数组的基本概念二、一维数组2.1 一维数组的定义2.2 一维数组初始化2.3 一维数组的引用 三、二维数组3.1 二维数组的定义3.2 二维数组初始化3.3 二维数组的引用 四、C语言数组是静态的&#xff0c;不能插入或删除元素五、C语言数组的越界和溢出5.1 数组越界5.2 数组…

第一个2DGodot游戏-从零开始-逐步解析

视频教程地址&#xff1a;https://www.bilibili.com/video/BV1Hw411v78Y/ 前言 大家好&#xff0c;这一集我将要带领大家完成官方文档里的第一个2DGodot游戏&#xff0c;从零开始&#xff0c;逐步解析&#xff0c;演示游戏的制作全过程&#xff0c;尽量让&#xff0c;就算是新…

C++ - 包装器 - bind()函数

包装器 在 C 当中可能会有各种各样的可调用类型&#xff0c;比如 函数指针&#xff0c;仿函数&#xff0c;lambda 等等&#xff0c;那么这么多的可调用类型&#xff0c;我们在使用的时候就会犯迷糊&#xff0c;那可不可以统一控制一下呢&#xff1f; function包装器&#xff…

关于SSA算法中矩阵的3种运算:转置、求逆、相乘

1、矩阵转置 // 矩阵转置(二维矩阵)public static double[][] transposeTwo(double[][] matrix) {int rows matrix.length;int cols matrix[0].length;double[][] transposedMatrix new double[cols][rows];for (int i 0; i < rows; i) {for (int j 0; j < cols; j)…

一篇博客带你学会关于Vuex使用

前言&#xff1a; 在我们之前我们的学习vue知识中&#xff0c;我们组件传递方式有父传子&#xff0c;子传父&#xff0c;这两种方法传递参数复杂&#xff0c;所以我们今天来学习Vuex&#xff0c;就可以解决这个传递的问题&#xff01;&#xff01;&#xff01; 一&#xff0c;V…

【算法思考】端到端实例分割模型 SOLO

目录 背景工作总结 背景 不同于语义分割&#xff0c;实例分割不仅需要输出图像的语义蒙版&#xff0c;还要对图像中不同的实例作区分。如下图所示&#xff0c;实例分割任务需要多不同的羊做区分&#xff0c;输出不同的实例蒙版。 由于图片中实例个数的不确定性&#xff0c;实例…

第二章 C++的输出

系列文章目录 第一章 C的输入 文章目录 系列文章目录前言一、个人名片二、cout三、printf总结 前言 今天来学C的输出吧&#xff01; 一、个人名片 二、cout cout 三、printf printf 总结 最近懒得写博客怎么办&#xff1f;

【技术研究】环境可控型原子力显微镜超高真空度精密控制解决方案

摘要&#xff1a;针对原子力显微镜对真空度和气氛环境精密控制要求&#xff0c;本文提出了精密控制解决方案。解决方案基于闭环动态平衡法&#xff0c;在低真空控制时采用恒定进气流量并调节排气流量的方法&#xff0c;在高真空和超高真空控制时则采用恒定排气流量并调节进气流…

Docker系列--网络的配置

原文网址&#xff1a;Docker系列--网络的配置_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Docker的网络的配置。 官网网址 https://docs.docker.com/engine/reference/commandline/network/ 网络的默认设置 Docker启动之后&#xff0c;系统中会产生一个名为docker0的…

2015架构真题(五十)

供应链中信息流覆盖了供应商、制造商和分销商&#xff0c;信息流分为需求信息流和供应信息流&#xff0c;&#xff08;&#xff09;属于需求信息流&#xff0c;&#xff08;&#xff09;属于供应信息流。 库存记录生产计划商品入库单提货发运单 客户订单采购合同完工报告单销售…

Leetcode.2867 统计树中的合法路径数目

题目链接 Leetcode.2867 统计树中的合法路径数目 rating : 2428 题目描述 给你一棵 n n n 个节点的无向树&#xff0c;节点编号为 1 1 1 到 n n n 。给你一个整数 n n n 和一个长度为 n − 1 n - 1 n−1 的二维整数数组 e d g e s edges edges &#xff0c;其中 e d g …

Matlab地理信息绘图—风玫瑰图

文章目录 风玫瑰图的作用Matlab代码实现结果展示 风玫瑰图的作用 风玫瑰图&#xff08;Wind Rose Plot&#xff09;是一种用于可视化风向和风速分布的图表。它通常以极坐标形式呈现&#xff0c;其中角度表示风向&#xff0c;半径表示风速的频率或相对概率。风玫瑰图对于理解和呈…

项目log日志mysql记录,熟悉python的orm框架

直接在项目里面创建一个class&#xff0c;这个类对应着mysql里面的表 我们运行项目&#xff0c;可以自动建立表 在.env中找到mysql的配置信息&#xff0c;这个是在NB服务器上运行的mysql&#xff0c;localhost需要变成NB服务器的ipv4地址 使用Mysql工具连接查看&#xff0c;连…

【Java学习之道】继承与多态

引言 本文将介绍面向对象编程的核心概念——继承与多态。对于初学者来说&#xff0c;掌握这些基本概念是迈向Java高手的第一步。接下来&#xff0c;让我们一起揭开继承与多态的神秘面纱&#xff0c;感受它们的魅力吧&#xff01; 一、继承 继承是面向对象编程的一个重要特性…

C++学习day5

目录 作业&#xff1a; 1> 思维导图 2> 多继承代码实现沙发床 1>思维导图 2> 多继承代码实现沙发床 #include <iostream>using namespace std; //创建沙发类 class sofa { private:string sitting; public:sofa(){cout << "sofa的无参构造函数…

算法leetcode|82. 删除排序链表中的重复元素 II(rust重拳出击)

文章目录 82. 删除排序链表中的重复元素 II&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 82. 删除排序链表中的重复元素 II&#xff1…

开发者职场“生存状态”大调研报告分析 - 第一版

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…