命名空间——初识c++

在这里插入图片描述
在这里插入图片描述

.

个人主页:晓风飞
专栏:数据结构|Linux|C语言
路漫漫其修远兮,吾将上下而求索


文章目录

  • 经典的Hello Word 起航
  • c++关键字
  • c语言的命名冲突问题
  • 域作用限定符`::`
  • 命名空间 namespace
    • 命名空间定义
    • 命名空间的使用
      • 1.加命名空间名称及作用域限定符
      • 2.使用using将命名空间中某个成员引入
      • 3.使用using namespace 命名空间名称 将命名空间展开
  • std命名空间


经典的Hello Word 起航

c++兼容c,这是c的Hello Word代码

在这里插入图片描述

c++版本的的Hello Word代码,接下来我们将理解这些代码

在这里插入图片描述


c++关键字

在这里插入图片描述


c语言的命名冲突问题

程序员和库的命名问题

#include<stdio.h>
#include<stdlib.h>int rand = 10;int main()
{printf("Hello Word");printf("%d\n,rand");return 0;
}

这段代码看起来没有问题,但是运行的时候会报重定义的错误
在这里插入图片描述
因为包含了这个头文件#include<stdlib.h>,当它展开的时候,会有一个全局函数rand与我们定义的rand命名冲突,把这个头文件去掉就可以正常运行了。

那么在c++中是怎么解决这个问题的呢?

域作用限定符::

c++包含四个域,局部域全局域命名空间域,类域

#include<stdio.h>int x = 0;int main()
{int x = 1;printf("Hello Word\n");printf("%d\n", x);printf("%d\n",::x);return 0;
}

在这段代码中,printf("%d\n",::x);表示输出全局域的x的值其中::的左边是空的,表示全局域,所以两个x分别表示局部变量的x为1,和全局变量的x为0;

在这里插入图片描述


命名空间 namespace

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

命名空间定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

在这里插入图片描述

编译器搜索原则先局部域后全局域,如果指定了,就去指定区域搜索,使用命名空间我们就可以解决之前rand与我们定义的rand命名冲突的问题了

命名空间的使用

1.加命名空间名称及作用域限定符

int main()
{printf("%d\n", N::a);return 0;    
}

2.使用using将命名空间中某个成员引入

using N::b;
int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0;    
}

3.使用using namespace 命名空间名称 将命名空间展开

比如我们在命名空间one中定义一个结构体
在这里插入图片描述
当我们要使用这个命名空间的结构体的时候,每次都要按照如下格式引用,否则报错

 struct one::Node phead;

这时候我们在代码中加上using namespace one;就可以直接引用了

在这里插入图片描述


std命名空间

这时候回到我们第一个c++的Hello Word程序,可以发现我们展开了命名空间std,其实这个std的命名空间代表了c++所有库的命名空间,但是这是一个图方便的写法,推荐另外一种写法

#include<iostream>
using namespace std;int main()
{cout << "Hello Word" << endl;return 0;
}

另外一种写法,这种写法在项目里不容易产生命名冲突

#include<iostream>int main()
{std::cout << "Hello Word" << std::endl;return 0;
}

当我们把std取消展开,就会发现coutendl报错误,虽然 coutcin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream >头文件中。,但是这里为什么包含了头文件还是报错误呢?

在这里插入图片描述

按照编译器搜索原则先局部域后全局域,如果指定了,就去指定区域搜索的原则,局部找不到cout,然后再去全局找cout,都没有找到,他们都被stdt封装起来了,所以使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。

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

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

相关文章

异常:程序出现的问题

目的&#xff1a;为了以后发现异常后怎么去处理 异常的作用

【NTN 卫星通信】 TN和多NTN配合的应用场景

1 场景描述 此场景描述了农村环境&#xff0c;其中MNO (运营商TerrA)仅在城市附近提供本地地面覆盖&#xff0c;而MNO (SatA)提供广泛的NTN覆盖。SatA使用GSO轨道和NGSO轨道上的卫星。SatA与TerrA有漫游协议&#xff0c;允许:   所有TerrA用户的连接&#xff0c;当这些用户不…

免费的chatgpt网站(包含最新版4.0)

相信每个人在生活工作学习中都逃不过用chatgpt来解决一些问题&#xff0c;下面我长话短说&#xff0c;为大家简单介绍几款免费且好用的chatgpt网站 1、YesChat 网址&#xff1a;YesChat-ChatGPT4V Dalle3 Claude 3 All in One Free 第一个就给大家介绍一个狠角色&#xff0c;最…

接口冒烟测试方法

接口冒烟测试方法 今年遇到了几个问题&#xff0c;与接口的功能和性能相关&#xff0c;恰巧最近公司也在组织以冒烟测试为主题的活动&#xff0c;于是乎突发奇想&#xff0c;寻思着能否将接口测试与冒烟测试结合起来&#xff0c;发掘一些新的接口测试思路与方法。 平时对接口…

专升本 C语言 万字考点笔记全国通用

前言 全章内容多次校验整理,可以放心食用;如果发现内容有不严谨的地方,请随时私信张三xy 形而上学者谓之道&#xff0c;形而下学者谓之器 目录 前言 常考概念 一、C语言的基础知识 第一节、对C语言的基础认识 第二节、C语言程序生命周期 第三节、标识符 第四节、进制的转…

5G里面NR,gNB,en-gNB,ng-eNB是什么意思

不得不提一个国际组织&#xff0c;叫国际电信联盟(ITU, International Telecommunication Union)&#xff0c;简称国际电联。我们先看看国际电联的自我介绍&#xff1a; 国际电信联盟 『国际电联 (国际电信联盟) 是主管信息通信技术事务&#xff08;ICT&#xff09;的联合国机…

英伟达 V100、A100/800、H100/800 GPU 对比

近期&#xff0c;不论是国外的 ChatGPT&#xff0c;还是国内诸多的大模型&#xff0c;让 AIGC 的市场一片爆火。而在 AIGC 的种种智能表现背后&#xff0c;均来自于堪称天文数字的算力支持。以 ChatGPT 为例&#xff0c;据微软高管透露&#xff0c;为 ChatGPT 提供算力支持的 A…

春分|春和景明,万物复苏,百华与您共赴春天的盛宴

春分&#xff0c;是二十四节气之一&#xff0c;标志着春季正式来临。在这个时节&#xff0c;阳光明媚&#xff0c;气温逐渐回暖&#xff0c;大自然万物开始复苏&#xff0c;呈现出一幅春和景明的美好画卷。 春分时节&#xff0c;昼夜平分&#xff0c;白天和夜晚的时间几乎一样…

Docker-镜像仓库

Docker ⛅Docker-Registry&#x1f320;分类&#x1f320;镜像仓库工作机制&#x1f320;常用的镜像仓库&#x1f320;镜像仓库命令☃️docker login☃️docker pull☃️docker push☃️docker search☃️docker logout &#x1f320;镜像命令[部分]☃️docker images☃️docke…

【呼市经开区建设服务项目水、电能耗监测 数采案例】

实施方案 针对能耗采集中的水、电能源数据采集&#xff0c;因客观因素条件&#xff0c;数据采集方面存在较大难度。大多数国网电表485接口由于封签限制&#xff0c;不能实施采集&#xff0c;不让拆机接线&#xff0c;采集实施存在困难。水量能耗采集&#xff0c;存在类似问题&a…

.net使用excel的cells对象没有value方法——学习.net的Excel工作表问题

$exception {"Public member Value on type Range not found."} System.MissingMemberException 代码准备运行问题解决1. 下载别的版本的.net框架2. 安装3. 运行 代码 Imports Excel Microsoft.office.Interop.Excel Public Class Form1Private Sub Button1_Click(…

深入浅出前端本地储存

引言 2021 年&#xff0c;如果你的前端应用&#xff0c;需要在浏览器上保存数据&#xff0c;有三个主流方案&#xff1a; CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

使用Laravel开发项目

如何使用Laravel框架开发项目 一、安装Laravel框架 1.在安装Laravel框架钱我们需要先查看要安装的Laravel框架版本以及版本所需要的安装运行条件。 2.配置好安装环境后再安装Laravel框架 2.1.配置安装环境 1&#xff09;PHP版本 2&#xff09;PHP OpenSSL扩展 3&#xff…

macOS - 获取硬件设备信息

文章目录 1、CPU获取方式 一&#xff1a; system_profiler获取方式二&#xff1a;sysctl&#xff0c; machdepmachdep 2、内存3、硬盘4、显卡5、声卡6、光驱7、系统序列号8、型号标识符9、UUID 等信息 10. 计算机名称 1、CPU 获取方式 一&#xff1a; system_profiler % syst…

这40 张图帮你搞懂分布式追踪

在微服务架构中&#xff0c;一次请求往往涉及到多个模块&#xff0c;多个中间件&#xff0c;多台机器的相互协作才能完成。 这一系列调用请求中&#xff0c;有些是串行的&#xff0c;有些是并行的&#xff0c;那么如何确定这个请求背后调用了哪些应用&#xff0c;哪些模块&…

Linux-docker安装数据库mysql

1、拉去mysql镜像&#xff1a; docker pull mysql2、创建容器挂载路径 mkdir -p /usr/local/jiuxiang/mysql/data # 数据存储位置 mkdir -p /usr/local/jiuxiang/mysql/logs # 日志存储位置 mkdir -p /usr/local/jiuxiang/mysql/conf # 配置文件3、启动容器 docker run -…

蓝桥杯 2023 省A 更小的数

主要思路&#xff1a; 输入一个长度为n的字符串&#xff0c;用二维数组dp[i][j]来记录子串[i, j]是否需要反转一次才能满足条件。使用动态规划自底向上地填充dp数组。根据问题的要求&#xff0c;需要考虑字符串的子串中字符的大小关系来判断是否需要反转。最后统计满足条件的子…

备战秋招(coding篇)

其中coding题目来源于师兄面试经验 1、链表的结构体反转链表 本质上就是一个构造函数 struct ListNode{int val_;ListNode* next_;ListNode() : val_(0), next_(NULL) {}ListNode(int x) : val_(x), next_(NULL) {}ListNode(int x, ListNode* next) : val_(x), next_(next) …

深度观察2024中国系统架构师大会(SACC)

今年的中国系统架构师大会&#xff08;SACC&#xff09;在我所在的城市广州举办&#xff0c;很荣幸受邀参加。这次能接触到国内最优秀的架构师&#xff0c;学习他们的架构思想和行业经验。对我而言非常有意义。 大会分为上下午共4场&#xff0c;我参加了上午的多云多活架构设计…

DataFrame转换为Numpy数组

参考&#xff1a;Converting DataFrame to Numpy Array Numpy&#xff08;Numerical Python&#xff09;是一种开源的Python科学计算库&#xff0c;它提供了一个强大的多维数组对象和一系列的工具函数&#xff0c;用于处理这些数组。Pandas则是Python中另一个流行的数据处理库…