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…

SpringBoot异步接口实现:提高系统的吞吐量

前言 Servlet 3.0之前&#xff1a;每一次Http请求都由一个线程从头到尾处理。 Servlet 3.0之后&#xff0c;提供了异步处理请求&#xff1a;可以先释放容器分配给请求的线程与相关资源&#xff0c;减轻系统负担&#xff0c;从而增加服务的吞吐量。 在springboot应用中&#…

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;生物质和煤在高温和缺氧…

Linux系统调用mmap

0 前言 《Linux系统调用》整体介绍了系统调用,本文重点分析其中mmap的实现与使用方法。 1 定义 1.1 x86 (1)linux-2.6.31- 采用老式定义方法: asmlinkage long sys_mmap(unsigned long addr, unsigned long len,unsigned long prot, unsigned long flags,unsigned long…

记录解决问题--redis ssl连接

1.问题场景 springboot连接redis启动报错&#xff0c;感觉是没连上redis&#xff0c;本地是正常启动的&#xff0c;但是本地不是ssl连接。 2.redis ssl连接知识 ①一般不开启ssl的连接&#xff0c;直接连接即可&#xff0c;有密码输密码。 ②不受信的ssl连接&#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…

使用zdppy_amauth开发获取用户列表接口

服务端代码&#xff1a; 1、创建数据库连接对象2、初始化数据库3、声明一个上下文4、挂载用户相关的路由&#xff0c;这里主要由&#xff1a;登录&#xff0c;注册&#xff0c;获取用户列表5、启动服务 import mcrud import api import amauth import env import contextlibe…

【C#】与cpp异同总结

1.类外部调用类内的静态变量和静态成员 C#中类内定义的静态变量和静态方法&#xff0c;在类外访问是用类名.变量 或者 类名.方法 public class MyClass {public static int MyStaticVariable 10;public static void MyStaticMethod(){Console.WriteLine("This is a sta…

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

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

elasticsearch脚本更新文档

模板 {"saleIncludeCustomers": [{"center": "分公司","code": "34234","launchId": "规则id"}],"centerIncludeCustomers": {"center1": [{"code": "1234567&quo…

每日两题 / 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;创…

【吴恩达机器学习-week2】Python、NumPy、向量化

文章目录 1.1 目标1.2 有用的参考资料2 Python 和 NumPy 3 向量3.1 概要3.2 NumPy数组**3.3 向量构造**3.4 向量的操作3.4.1 索引3.4.2 切片**3.4.3 单向量操作**3.4.4 向量与向量的逐元素操作3.4.5 标量与向量的运算3.4.6 向量的点积运算3.4.7 速度需求&#xff1a;向量化与fo…

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;点击“下载代码”(需要…