C++——命名空间

在这里插入图片描述

c++ ——命名空间

  • 前言
  • 一.命名空间
    • 命名空间的进一步拓展
  • 二.io流特性

前言

**
Alt

好久不见,甚是想念~今天我们讲解的是关于c++命名空间的一些知识点,这只是开胃小菜哦,期待我们后面更深入知识的灵魂碰撞吧

**

一.命名空间

怎么形容呢~命名空间出现的情况有两种:

第一种就是自命名的变量与封存在std库函数命名冲突了。(std相当于是c++标准库里包含了c++所有的函数与对象名,std本身也是命名空间)

第二种就是自命名变量互相冲突了。这种发生场景很常见,无论是与别人对接工作又或是参照对方源代码都会出现这种情况。

#include <stdio.h>
#include <stdlib.h>
//命名变量与库里的函数名冲突
int rand = 0;int main()
{printf("%d\n", rand);return 0;
}

在这里插入图片描述
在C语言中是无法解决该问题的,所以这也使得在C++改进此问题。

怎么说呢~就比如有一个人偶叫壮壮,它是早在洪荒之初(std库)就被定义的。后来呢又出现了一个人偶也叫壮壮,只不过这个人偶是我们人工捏造的(自命名变量)。那就导致命名冲突了,因为编译器看着两个壮壮不知道到底要用哪个。在它的视野里两人都叫壮壮,没有区分。

#include <stdio.h>
#include <stdlib.h>
namespace lj
{int rand = 0;
}int main()
{//::域作用限定符printf("%d\n", lj::rand);return 0;
}

而命名空间要做的就是把其中一个人偶关在一个房间里,让外面的那个使系统默认只能看到它,那么系统就会默认使用它。那么关在房间里的呢需要一把钥匙,只有找到钥匙才可以让系统看到被关在里面的它并使用它。(而lj::就是我们所在命名空间的钥匙)

有了命名空间可以很好地解决上述两种情况。

命名空间的进一步拓展

namespace lj
{int rand = 0;int Add(int x, int y){return x + y;}
}int main()
{printf("%d\n", lj::rand);lj::Add(1, 2);return 0;
}

命名空间也同样可以对函数使用,不过得注意若想用自己写的函数需要一把钥匙(lj::)。

namespace lj
{int rand = 0;int Add(int x, int y){return x + y;}struct Node{struct Node* node;int val;};
}int main()
{printf("%d\n", lj::rand);lj::Add(1, 2);//用结构体定义一个节点struct lj::Node node;return 0;
}

命名空间对结构体同样适用,需要注意的是lj::是要放到命名变量的前面,不能放到struct前面。

namespace lj
{namespace lj1{int rand = 0;}namespace lj2{int rand = 1;}int Add(int x, int y){return x + y;}struct Node{struct Node* node;int val;};
}int main()
{printf("%d\n", lj::lj1::rand);printf("%d\n", lj::lj2::rand);lj::Add(1, 2);//用结构体定义一个节点struct lj::Node node;return 0;
}

命名空间还有一个特性,当有多个命名相同的变量时命名空间可以嵌套。(虽然感觉日常不会用到)

**

还有一个小知识点,举例我们在和对接工作时都用到了自己写的栈函数,但我们又不想去用他的,如何避免这种情况发生呢?我们可以用命名空间把所声明的栈与定义的栈都包含起来,后面在用的时候用这把钥匙开门就能找到我们所写的栈了。不用担心2个命名空间相同,因为在.h与.cpp分别有相同的命名空间时,最后相同命名空间会汇总在一起的。

**

在这里插入图片描述

不过有了命名空间感觉好麻烦,为了能够避免命名冲突我们需要在每一次通过钥匙才能用到我们想要的变量,虽然这样很安全,但是在测试时还是很不方便的,毕竟我们是自己测试,不用与其他人对接。

using namespace lj;
int main()
{//lj::ST s;ST s;StackInit(&s);StackPush(&s, 1);StackPush(&s, 2);StackPush(&s, 3);StackPush(&s, 4);return 0;
}

我们需要有一种可以改变编译器默认选择的方法,使得每次运行的时候都默认优先选择我们所在的命名空间的变量,而非std库里面默认定义的变量。usingnamespace lj——解放命名空间。

*那么在这里我们就可以理解using namespace std的用途了,它是C++官方库定义的命名空间,也因此作为编译器默认选择的对象(说是默认,其实只不过是变为全局变量),这样库里的东西就随便用了。

不过命名空间还是不要随随便便展开,std之所以封起来就是防止我们所命名的变量与库里冲突。

*总结起来就是收纳盒理论,平时封装好的函数都存在std收纳盒中,当我们要使用它时就得把收纳盒的东西倒出来这样才可以找到,因为在收纳盒的掩盖下我们的全局视野里是不会看到那个我们需要用的对象的。

二.io流特性

就像我们一开始学习c语言的输入(scanf)与输出(printf)一样,在开启c++的学习之前我们也要认识属于c++的输入与输出。当然c++能够兼容99%的c语言特性,我们可以视情况灵活运用。
在使用io流特性之前需要引入头文件:#include

不过cout与cin封存在std里在全局变量是默认找不到的,所以我们需要using namespace std或者std::cout指定使用。
在这里插入图片描述
流插入我们可以理解为从外部发出电波给到b,而流提取就是从b里面提取数据并打印出来。

相较于c语言的优点就是在输入输出的时候不用去在意变量的类型,什么%d,%lf等等通通不用管。它会自动去识别变量类型。

当然也有不足之处,在我们需要控制浮点数精度时反而很麻烦,这时候倒不如直接用printf来得简单。

在这里插入图片描述
除此之外,换行的方式也具有多种。

有一个问题,每次指定命名空间很麻烦,展开又危险。这就引申出命名空间的第三种用途:指定命名展开。

using std::cout;
using std::endl;int main()
{cout << "hello world\n";cout << "hello world"<<"\n";cout << "hello world" << endl;return 0;
}
​​​​​​​​​​​​​​​​​​​​​​​​​​

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

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

相关文章

Rocketmq如何保证消息不丢失和幂等性

生产者 生产者通过RocketMQ提供的事务消息&#xff08;两阶段提交&#xff09;能保证消息的一致性。 第一阶段给Broker发送一个半事务消息&#xff0c;半事务消息是不能消费的消息&#xff0c;broker已经收到生产者发送的消息&#xff0c;但是并未收到生产者的二次确认&#x…

JavaScript使用 BigInt

在 JavaScript 中&#xff0c;最大的安全整数是 2 的 53 次方减 1&#xff0c;即 Number.MAX_SAFE_INTEGER&#xff0c;其值为 9007199254740991。这是因为 JavaScript 中使用双精度浮点数表示数字&#xff0c;双精度浮点数的符号位占 1 位&#xff0c;指数位占 11 位&#xff…

2024C题生物质和煤共热解问题的研究 详细思路

背景 随着全球能源需求的不断增长和对可再生能源的追求&#xff0c;生物质和煤共热解作为一种潜在的能源转化技术备受关注。生物质是指可再生能源&#xff0c;源自植物和动物的有机物质&#xff0c;而煤则是一种化石燃料。** 在共热解过程中&#xff0c;生物质和煤在高温和缺氧…

unity基础(二)

debug方法 Debug.Log(" 一般日志 ");Debug.LogWarning(" 警告日志 ");Debug.LogError(" 错误日志 ");// Player Informationstring strPlayerName "Peter";int iPlayerHpValue 32500;short shPlayerLevel 10;long lAdvantureExp 1…

越秀城投·星汇城 | 看得再多,都不如实景现房更安心

对于大多数家庭而言&#xff0c;买房是人生大事。经历了前几年房企暴雷、楼盘停工烂尾的风波&#xff0c;“现房”成为买房人心中最安心的代名词。无需再等待&#xff0c;所见即所得。 越秀城投星汇城位于平度南部新城核芯片区&#xff0c;不仅享受区域发展的利好&#xff0c;…

vs2019 里 C++ 20规范的 string 类的源码注释

&#xff08;1&#xff09;读源码&#xff0c;可以让我们更好的使用这个类&#xff0c;掌握这个类&#xff0c;知道咱们使用了库代码以后&#xff0c;程序大致具体是怎么执行的。而不用担心程序出不知名的意外的问题。也便于随后的代码调试。 string 类实际是 库中 basic_strin…

基于JAVAEE的停车场管理系统(论文 + 源码)

【免费】基于JAVAEE的停车场管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89292324 基于JAVAEE的停车场管理系统 摘 要 如今&#xff0c;我国现代化发展迅速&#xff0c;人口比例急剧上升&#xff0c;在一些大型的商场&#xff0c;显得就格外拥挤&…

每日两题 / 24. 两两交换链表中的节点 25. K 个一组翻转链表(LeetCode热题100)

24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 定义三个指针&#xff0c;交换前先保存ntnt指针为next->next&#xff0c;cur和next两个节点&#xff0c;然后将pre->next指向next 若pre为空&#xff0c;说明当前交换的节点为头两个节点&#xff0c;…

VM虚拟机安装调试(步骤如下图)

VM虚拟机安装调试 随着一顿安装操作&#xff0c;还有enter键敲下&#xff0c;出现如下界面。

实现MYSQL8.3.0 版本流量抓取

实现MYSQL8.3.0 版本流量抓取 根据测试需求&#xff0c;需要抓取MYSQL8.3.0流量包&#xff0c;使用wireshark 数据库客户端实现 安装数据库服务端 这里就不给详细操作方法&#xff0c; 网上教程一大堆&#xff0c;小编这里是最新的MYSQL 8.3.0版本 安装成功后&#xff0c;创…

Omnity 进展月报 | 2024.4.1-4.30

Omnity 大事摘要 1、Octopus 官宣升级为 Omnity。 2、Omnity 4月28号正式上线&#xff0c;实现BTC 和 ICP 之间跨链转账 Runes 资产。 3、为庆祝上线&#xff0c;以符文 HOPE•YOU•GET•RICH 为资产&#xff0c;发红包快速触达大量用户&#xff0c;体验跨链服务。 4、Omni…

【前端】前端数据本地化的多种实现方式及其优劣对比

前端数据本地化的多种实现方式及其优劣对比 在现代Web开发中&#xff0c;提高页面响应速度和改善用户体验是核心目标之一。数据本地化是其中一种实现方式&#xff0c;它通过在客户端存储数据来减少服务器请求&#xff0c;从而加快数据载入速度和改善用户的体验。本文将介绍前端…

26、Qt使用QFontDatabase类加载ttf文件更改图标颜色

一、图标下载 iconfont-阿里巴巴矢量图标库 点击上面的链接&#xff0c;在打开的网页中搜索自己要使用的图标&#xff0c;如&#xff1a;最大化 找到一个自己想用图标&#xff0c;选择“添加入库” 点击“购物车”图标 能看到刚才添加的图标&#xff0c;点击“下载代码”(需要…

4000字超详解Linux权限

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 在Linux当中权限的体现主要有两种 普通用户 超…

图片无损压缩工具-VIKY

一、前言 Viky v3.4是一款功能强大的图片压缩工具&#xff0c;它能够提供高效的图片无损压缩服务。通过使用独特的压缩算法&#xff0c;该软件在显著减小图片文件大小的同时&#xff0c;还保持了图像的清晰度和色彩饱和度&#xff0c;确保了图像质量的优异表现。 二、软件特点…

CAPL如何实现TLS握手认证

CAPL有专门的章节介绍如何实现TLS握手认证的函数: CAPL调用哪些函数实现TLS握手认证,需要了解TLS在整个通信过程的哪个阶段。 首先TCP需要建立连接,这是TLS握手的前提。当TLS握手认证完成后,可以传输数据。 所以TLS握手开始前需要确保TCP建立连接,TCP传输数据前需要确保…

泰迪科技2024中职大数据实训室方案解读

中职在大数据专业建设所遇到的困难 数据、信息安全、人工智能等新信息技术产业发展迅猛&#xff0c;人才极其匮乏&#xff0c;各个中职院校纷纷开设相应的专业方向。但是&#xff0c;绝大多数院校因为师资和积累问题&#xff0c;在专业建设规划、办学特色提炼、创新教学模…

Gradio 基础使用示例

文章目录 Gradio 基础使用示例简介安装示例-简单的输入、输出示例-启动配置示例-聊天对话示例-多页面Tab切换示例-使用Block自定义布局示例-Plot绘图示例-状态管理示例-提示、进度条参考 Gradio 基础使用示例 简介 Gradio 是一个用于构建快速原型和部署机器学习应用程序的开源…

wandb: - 0.000 MB of 0.011 MB uploaded持续出现的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【异常检测】新版异常检测库anomalib的使用

every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self. https://blog.csdn.net/weixin_39190382?spm1010.2135.3001.5343 0. 前言 异常检测库anomalib的使用 1. 前提 1.1 数据组织形式 说明&#…