当前位置: 首页 > news >正文

【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 来方便我们的学习,但是一定要小心它们之间的冲突.

总结

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

相关文章:

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

C入门 命名空间 南喵小鸡汤程序员可以让步&#xff0c;却不可以退缩&#xff0c;可以羞涩&#xff0c;却不可以软弱&#xff0c;总之&#xff0c;程序员必须是勇敢的。一 . 命名空间的介绍二.命名空间的实际应用1.为什么要有命名空间我们在使用变量时,通常会为他定义一个名字,在…...

通过代码MyBatis-plus实现对表中createTime和updateTime进行自动更新

通过代码MyBatis-plus实现对表中createTime和updateTime进行自动更新 实现这样的效果可以在数据库中设置&#xff0c;但是我们一般建议在代码里实现&#xff0c; 但是总不能每次insert和update的时候都手写new当前时间 因此推荐使用mybatis-plus 1导入依赖 <dependency&g…...

HTML 实时显示本地电脑时间(精确到毫秒)

<!DOCTYPE html> <html> <head><title>实时显示本地电脑时间&#xff08;精确到毫秒&#xff09;</title> </head> <body><h1>本地电脑时间&#xff08;精确到毫秒&#xff09;&#xff1a;</h1><h1 id"clock&q…...

opencv跨平台arm交叉编译之ubuntu

目录 1. 安装交叉编译工具链2. 安装依赖3. 配置工具链3.1 新建build目录3.2 安装cmake-gui3.3 工具链配置界面进行配置3.3.1 终端输入以下命令3.3.2 点击Configure&#xff0c;弹出编译方式选择对话框&#xff1a;3.3.3 点击Next3.3.4 点击Finish3.3.5 点击Configure。3.3.6 Ge…...

Git命令全集

1、克隆代码 查看项目地址 git remote -v直接克隆 git clone url克隆指定分支 git clone -b 分支 git地址RPC failed错误:修改Git的传输字节限制 git config --global http.postBuffer 10485760002、查看分支 查看 git branch -a切换分支 git branch 分支名从指定分支…...

[BigData:Hadoop]:安装部署篇

文章目录 一&#xff1a;机器103设置密钥对免密登录二&#xff1a;机器102设置密钥对免密登录三&#xff1a;机器103安装Hadoop安装包3.1&#xff1a;wget拉取安装Hadoop包3.2&#xff1a;解压移到指定目录3.2.1&#xff1a;解压移动路径异常信息3.2.2&#xff1a;切换指定目录…...

ubuntu 上vscode使用cmake编译运行c++程序

参考&#xff1a;ubuntu 上vscode使用cmake编译运行c程序_vscode ubuntu运行c程序_SCH0的博客-CSDN博客 文章是对官方过程的翻译&#xff1a; Get started with CMake Tools on Linux...

Node.js 新特性 SEA/单文件可执行应用尝鲜

#1 关于 SEA 单文件可执行应用&#xff08;SEA&#xff0c;Singe Executable Applications&#xff09;&#xff0c;是 Node.js 新版本的特性&#xff0c;最初在 v19.7.0、v18.16.0 加入&#xff0c;并在 v20.x 得到扩展。而上个月发布的全家桶 Bun.js&#xff0c;就自带了 SEA…...

137.只出现一次的数字II

137. 只出现一次的数字 II - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来…...

k8s-15 strogeclass

官网&#xff1a; https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner StorageClass提供了一种描述存储类 (class)的方法&#xff0c;不同的cass可能会映射到不同的服务质量等级和备份策略或其他策略等 每个 StorageClass 都包含 provisioner、parameters 和…...

微信小程序开发实战:利用差异对比显示对象属性变化

前言 在小程序开发中&#xff0c;经常会遇到需要比较两个对象之间的差异并将这些差异可视化展示在界面上的情况。这一过程对于数据管理和用户反馈至关重要。本文将介绍一种实用的方法&#xff0c;可以帮助开发者高效地比较两个对象的属性差异&#xff0c;并将这些差异以直观的方…...

Redis的GEO结构

GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xff0c;包含&#xff1a;经度…...

做UI设计师是否需要美术功底?

UI确实需要一定的手绘能力&#xff0c;但是跟画画是有很大不同的。 很多人问&#xff1a;学UI需不需要手绘能力。或者学UI需要什么绘画基础。 所以今天集体回答一下。 我们先来看一下跟绘画有关系的行业&#xff1a; 漫画&#xff1a; 主要的不是绘画能力&#xff0c;更重…...

python txt or 日志等超大文本文件读取

判断文件路径是否存在 要判断一个路径文件是否存在,可以使用Python的os.path模块中的exists()函数。下面是一个示例: import os# 要检查的文件路径 file_path = "path/to/file.txt"# 使用os.path.exists()函数判断文件是否存在 if os.path.exists(file_path):pri…...

Windows:Arduino IDE 开发环境配置【保姆级】

物联网开发学习笔记——目录索引 参考官网&#xff1a;Arduino - Home Arduino是一款简单易学且功能丰富的开源平台&#xff0c;包含硬件部分&#xff08;各种型号的Arduino开发板&#xff09;和软件部分&#xff08;Arduino IDE)以及广大爱好者和专业人员共同搭建和维护的互联…...

【LeetCode 算法专题突破】双指针(⭐)

文章目录 前言1. 移动零题目描述代码 2. 复写零题目描述代码 3. 快乐数题目描述代码 4. 盛最多水的容器题目描述代码 5. 有效三角形的个数题目描述代码 6. 三数之和题目描述代码 7. 四数之和题目描述代码 总结 前言 学算法入门必学的一个章节&#xff0c;双指针算法&#xff0…...

ts知识点——基础积累

第一章 快速入门 1、TypeScript简介 TypeScript是JavaScript的超集。它对JS进行了扩展&#xff0c;向JS中引入了类型的概念&#xff0c;并添加了许多新的特性。TS代码需要通过编译器编译为JS&#xff0c;然后再交由JS解析器执行。TS完全兼容JS&#xff0c;换言之&#xff0c;…...

mybatis plus MetaObjectHandler 不生效

首先要知道,spring boot 只会加载启动类同级和下级的bean 如果把bean放在启动类不同的上级目录,是加载不了bean的 如果把mybatisplus的配置文件放在与启动类不同包,就会扫描不到 例如放在这里,就扫描不到 放到这里,就可以扫描到...

力扣第216 组合总和 ||| c++ 回溯 + 注释

题目 216. 组合总和 III 中等 相关标签 数组 回溯 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺…...

深度学习系列51:hugging face加速库optimum

1. 普通模型 Optimum是huggingface transformers库的一个扩展包&#xff0c;用来提升模型在指定硬件上的训练和推理性能。Optimum支持多种硬件&#xff0c;不同硬件下的安卓方式如下&#xff1a; 如果是国内安装的话&#xff0c;记得加上-i https://pypi.tuna.tsinghua.edu.c…...

LangGraph多智能体系统运维:从部署到监控的自动化方案

LangGraph多智能体系统运维:从部署到监控的全链路自动化方案 一、引言 钩子:你是否也踩过LangGraph上线的这些坑? 上周接到某企业AI团队的紧急求助:他们基于LangGraph搭建的客户服务多智能体系统上线仅3小时就全线崩溃,1.2万条用户咨询全部卡住,技术团队排查了2个小时才…...

Java 开发,不要瞎忙,十点睡觉六点起床,天塌不了

你是一名 Java 开发&#xff0c;不要瞎忙&#xff0c;十点睡觉六点起床&#xff0c;天塌不了。我的想法对吗&#xff1f; 没问题&#xff0c;这就给你上干货。想在 Java 开发这行准点下班&#xff0c;光靠手速快是不够的&#xff0c;核心在于掌控节奏和学会拒绝。 这里有一份帮…...

Cron表达式智能解析与生成工具:提升定时任务开发效率

1. 项目概述&#xff1a;一个为Cron表达式减负的智能助手 如果你是一名运维工程师、后端开发者&#xff0c;或者任何需要与定时任务打交道的人&#xff0c;那么你一定对Cron表达式又爱又恨。爱的是它那套简洁而强大的语法&#xff0c;能精准地定义“每月的第一个星期一的凌晨3…...

口碑好的芯片老化座哪家专业

在芯片制造与测试领域&#xff0c;芯片老化座是一个至关重要的设备。它能够模拟芯片在长期使用中的各种环境条件&#xff0c;提前发现潜在问题&#xff0c;确保芯片在实际应用中的稳定性和可靠性。那么&#xff0c;口碑好的芯片老化座哪家专业呢&#xff1f;今天我们就来详细探…...

终极Steam创意工坊下载器:WorkshopDL让你在非Steam平台也能畅玩模组!

终极Steam创意工坊下载器&#xff1a;WorkshopDL让你在非Steam平台也能畅玩模组&#xff01; 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在Epic Games Store或GOG平台…...

Kubernetes配置管理神器Monokle:可视化IDE提升YAML开发效率

1. 项目概述&#xff1a;一个被低估的Kubernetes配置管理神器如果你和我一样&#xff0c;每天都在和成堆的YAML文件、复杂的Kubernetes资源关系以及让人头疼的配置漂移问题打交道&#xff0c;那你一定理解那种在终端、IDE和Dashboard之间反复横跳的疲惫感。几年前&#xff0c;当…...

IP2366至为芯支持C口双向快充的140W多串锂电池充放电SOC芯片

英集芯IP2366是一款应用于移动电源、电动工具、智能家居、储能电源等方案的多串锂电池充电SOC芯片。支持高达140W的双向同步升降压充放电&#xff0c;充电电流可达5A。支持2至6节锂电池/磷酸铁锂电池串联&#xff0c;集成PD3.1、QC3.0等多种快充协议。内置14bit ADC&#xff0c…...

MobaXterm 全能终端神器:实战指南

写在前面&#xff1a;作为Windows下最全能的远程终端工具&#xff0c;MobaXterm 在 2026 年已迭代至 v26.0 版本。本文基于最新版&#xff0c;从工具选型对比、核心功能实战到效率提升技巧&#xff0c;带你真正掌握这款"瑞士军刀"。文末附赠快捷键大全和安全配置清单…...

基于MCP的任务编排框架:让AI代理动态规划与执行复杂工作流

1. 项目概述&#xff1a;一个面向AI代理的任务编排与执行框架最近在折腾AI应用开发&#xff0c;特别是想让大语言模型&#xff08;LLM&#xff09;能更“自主”地完成一些复杂任务时&#xff0c;发现了一个绕不开的痛点&#xff1a;任务编排。你给模型一个目标&#xff0c;比如…...

这家头部智能家居品牌是如何让全渠道电商闭环运营落地?

在电商渠道愈发多元的当下&#xff0c;让很多企业陷入 “数据多却用不好” 的困境。这不是个别现象&#xff0c;而是绝大多数全渠道电商企业正在经历的“成长烦恼”。今天&#xff0c;我们用一个真实案例&#xff0c;带您看看如何用一套系统&#xff0c;彻底告别这些噩梦。这家…...