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

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.mzph.cn/news/104850.shtml

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

相关文章

pycharm连接gitlab

1、下载安装gitlab 下载地址&#xff1a;Git - Downloading Package 下载后傻瓜式安装&#xff0c;注意勾选配置环境变量 未配置自己配置&#xff0c;电脑-属性-高级系统配置-环境变量 系统变量path&#xff1a;添加git安装目录下bin目录 2、检验安装完成 桌面右键git-open…

物联网AI MicroPython传感器学习 之 TEA5767 FM收音机模块

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 TEA5767 FM收音机模块是工作频率在76MHz&#xff5e;108MHz的自动数字调谐收音机。其特点高灵敏度、高稳定、低噪声&#xff0c;内部集成了中频选频和解调网络。 引脚定义 GND&#xff1a;接…

组件自定义事件

组件自定义事件是一种组件间通信的方式&#xff0c;适用于&#xff1a;子组件 > 父组件 使用场景 A是父组件&#xff0c;B是子组件&#xff0c;B想给A传数据&#xff0c;那么就要在A中给B绑定自定义事件&#xff08;事件的回调在A中&#xff09;。 绑定自定义事件&#x…

Java对象的比较

目录 PriorityQueue中插入对象 元素的比较 基本类型的比较 对象比较问题 对象的比较 覆写基类的equals 基于Comparble接口类的比较 基于比较器的比较 三种方式的对比 集合框架中PriorityQueue的比较方式 PriorityQueue中插入对象 上一篇博文中我们讲了优先级队列&#…

虚幻引擎:数据表格的C++常用API

1.将数据表格中的所有数据存到一个数组中 //参数1 // 错误提示 //参数2 // 存储的数组 TArray<FKeyInfoHeader*> array; KeyInfoDT->GetAllRows<FKeyInfoHeader>(TEXT("错误"),array); 2.获取表格中所有的行名称 TArray<FName>array; …

golang 拉取 bitbucket.org 私有库

以 bitbucket.org 平台和mac电脑为例 前置条件私库需要给你账号权限&#xff0c;可拉取的权限&#xff0c;否则无法进行正常拉取 我们采用ssh方式&#xff0c;需要在本地生成对应的 rsa 的公钥和私钥&#xff0c;将公钥配置如下图&#xff1a; 在 .ssh/config 写入你的配置 H…

2015架构案例(五十一)

第5题 【说明】某信息技术公司计划开发一套在线投票系统&#xff0c;用于为市场调研、信息调查和销售反馈等业务提供服务。该系统计划通过大量宣传和奖品鼓励的方式快速积累用户&#xff0c;当用户规模扩大到一定程度时&#xff0c;开始联系相关企业提供信息服务&#xff0c;并…

Codeforces Round 903 (Div. 3) C(矩形旋转之后对应的坐标)

题目链接&#xff1a;Codeforces Round 903 (Div. 3) C 题目&#xff1a; 思想&#xff1a; 旋转之后对应的坐标&#xff1a; &#xff08;i&#xff0c;j&#xff09;&#xff08;n1-j&#xff0c;i&#xff09;&#xff08;n1-i&#xff0c;n1-j&#xff09;&#xff08;j…

浅谈MDK, IAR,CLANG和GCC的局部变量字节对齐处理差异(2023-10-13)

视频&#xff1a; https://www.bilibili.com/video/BV1CB4y1Z7kA 浅谈MDK, IAR, CLANG和GCC的局部变量字节对齐处理差异 问题由来&#xff1a; 早期这个帖子里面的局部变量对齐仅测试了MDK AC5&#xff0c;但项目中使用AC6发现了新问题&#xff0c;看来AAPCS规约研究的还是不…

ArcGIS笔记4_水动力模型验证不理想时如何修改局部水深地形

本文目录 前言Step 1 模型验证不理想的情况Step 2 修改确值点并重新插值 前言 本章主要服务于MIKE水动力模型的调整修改工作。水动力模型跑完之后&#xff0c;常常会出现验证结果不理想的情况&#xff0c;比如潮位验证中&#xff0c;实测站点数据与模拟数据相差很大&#xff0…

苹果ios用户下载ipa文件内测签名的后的app应用下载安装到手机图标消失了-解决方案

下载好的应用竟然找不到了&#xff1f;这么神奇&#xff1f;我尝试了解了一下复原了同学给我的内容果然出现了我尝试科技了一下&#xff0c;总结了以下的可能性&#xff01;同学如果这个回答解决了你的困扰&#xff0c;同学给个赞&#xff0c;如果你有更好的排查方案评论区分享…

Modelsim查看波形窗口内断言(SVA)消息指示器

步骤1&#xff1a;创建工程并编译完成 在相应目录下创建好工程并编译无错误后&#xff1b; 步骤二&#xff1a; 在菜单栏中选择“Simulate”—>“Start Simulation”—>“Others”,在“Others Vsim Options”中输入 -msgmode both -displaymsgmode both 步骤三&#xf…

UI自动化测试 —— Jenkins配置

前一段时间帮助团队搭建了UI自动化环境&#xff0c;这里将Jenkins环境的一些配置分享给大家。 背景&#xff1a; 团队下半年的目标之一是实现自动化测试&#xff0c;这里要吐槽一下&#xff0c;之前开发的测试平台了&#xff0c;最初的目的是用来做接口自动化测试和性能测试&…

SQL Server远程登录失败

SQL Server远程登录失败 检查SQL SERVER 是否允许远程访问. 具体步骤: 1)在远端SQL Server主机上,打开SSMS并连接数据库 2)在相应”数据库”上单击右键,选择”属性” 3)选择”连接”选项卡,检查”远程服务器连接”下,RPC服务是否选择. 设置SQL Server相关TCP连接 1.打开SQL Se…

下载Python的不同版本在同一台电脑上如何共存

1. 下载安装不同版本的Python 官网下载&#xff1a;https://www.python.org/downloads/安装自己需要的版本&#xff08;我这里以Python3.6和Python3.9为例&#xff0c;下载安装细节不过多赘述&#xff09; &#xff08;这里的安装路径自己设定&#xff0c;命名最好是根据下载…

491. 递增子序列

给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也可以视作递增序列的一种特殊情况。 示例 1&#x…

【160】相交链表

方法一&#xff1a;双指针法 算法思想&#xff1a; 使用两个指针p1&#xff0c;p2分别遍历headA和headB。 当p1遍历完headA或p2遍历完headB&#xff0c;我们让该指针去遍历另一个链表。 由于两个指针走的路程相同&#xff0c;所以若两链表相交&#xff0c;则p1&#xff0c;p2一…

项目管理之六大目标及成功方程式

项目管理的六大目标分别是范围、质量、时间、成本、收益和风险。在项目开始之前&#xff0c;需要明确了解项目的范围&#xff0c;并在项目执行过程中对范围进行严格控制&#xff0c;确保项目不偏离既定的范围。同时&#xff0c;需要明确项目的质量标准和预期成果&#xff0c;然…

VRTK4 代码 取消/禁用 抓取

using Tilia.Interactions.Interactables.Interactors;private InteractableFacade interactableFacade GetComponentInChildren<InteractableFacade>();//取消抓取 if (interactableFacade.IsGrabbed) {interactableFacade.UngrabAll(); } //禁用抓取功能 interactable…

Spring Boot:Dao层-实例介绍

目录 Dao层的作用Dao层的特点与 Service 层和 Controller 层的关系实例介绍MenuDaoOperatorLogDaoRoleDaoUserDao四个文件的共同点引用的包使用Repository注解继承JpaRepository接口接口的实体类的主键类型使用 Query()注解 Dao层的作用 负责与数据库进行交互&#xff0c;主要…