C++命名空间的定义、C++命名空间的使用、C++输入输出等的介绍

文章目录

  • 前言
  • 一、C++命名空间的定义
    • 1. C++命名空间产生的原因
    • 2. 作用域限定符
    • 3. C++变量的访问顺序
  • 二、C++命名空间的使用
    • 1. 加命名空间名称及作用域限定符
    • 2. 使用using将命名空间中某个成员引入
    • 3. 使用using namespace 命名空间名称 引入
    • 4. 嵌套命名空间使用
  • 三、 C++输入&输出
  • 总结


前言

C++命名空间的定义、C++命名空间的使用、C++输入&输出等的介绍。


一、C++命名空间的定义

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

namespace hhb
{
	int a = 0;

	int Add(int x, int y)
	{
		return x + y;
	}

	int Sub(int x, int y)
	{
		return x - y;
	}

	struct Node
	{
		struct Node* next;
		int val;
	};
}
  • 命名空间内可以定义变量,函数,类型等
  • 命名空间内定义的变量,函数,类型等与在全局/局部变量定义一样。
  • 命名空间结尾不需要加分号。

命命名空间可以嵌套定义:

namespace hhb
{
	int a = 0;

	int Add(int x, int y)
	{
		return x + y;
	}

	namespace hhz
	{
		int Sub(int x, int y)
		{
			return x - y;
		}

		struct Node
		{
			struct Node* next;
			int val;
		};
	}
}

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

  • 比如:一个工程中的 test.h 和 test.cpp 中,两个相同名字的命名空间会被合并成一个。

1. C++命名空间产生的原因

C++会兼容C语言,C语言在多人协作等一些情况下,会有命名冲突的问题。C++为了解决C语言命名冲突的问题,定义了命名空间。一个命名空间就产生了一个新的作用域。
因此变量的空间可以分为 局部作用域,全局作用域,命名空间域。

2. 作用域限定符

作用域限定符 ------ ::(两个英文的冒号)

  1. 作用域限定符可以指定编译器寻找的空间。
  2. 作用域限定符前面空格(或不写),后面跟变量名,访问全局作用域。
#include <stdio.h>

int a = 1;

int main()
{
	int a = 0;
	printf("%d\n", ::a); // 1

	return 0;
}
  1. 命名空间名::变量名,访问指定命名空间域。
#include <stdio.h>

int a = 1;

namespace hhb
{
	int a = 10;
}

int main()
{
	int a = 0;

	printf("%d\n", hhb::a); // 10

	return 0;
}

3. C++变量的访问顺序

  1. 局部变量和全局变量先访问局部变量
#include <stdio.h>

int a = 1;

int main()
{
	int a = 0;
	printf("%d\n", a); // 0

	return 0;
}
  1. 没有局部变量,编译器到全局域寻找变量
#include <stdio.h>

int a = 1;

int main()
{
	printf("%d\n", a); // 1

	return 0;
}
  1. 命名空间域和全局域都存在变量,会在全局作用域中寻找变量
#include <stdio.h>

int a = 1;

namespace hhb
{
	int a = 10;
}

int main()
{

	printf("%d\n",a); // 1

	return 0;
}

二、C++命名空间的使用

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

#include <stdio.h>

int a = 1;

namespace hhb
{
	int a = 10;
}

int main()
{
	int a = 0;

	printf("%d\n", hhb::a); // 10

	return 0;
}

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

#include <stdio.h>
int a = 1;

namespace hhb
{
	int a = 10;
	int b = 20;
}

using hhb::b;

int main()
{
	int a = 0;

	printf("%d\n", hhb::a); // 10
	printf("%d\n", b); // 20

	return 0;
}

3. 使用using namespace 命名空间名称 引入

  • 直接将命名空间展开。
#include <stdio.h>

namespace hhb
{
	int a = 10;
	int b = 20;
}

using namespace hhb;

int main()
{
	printf("%d\n", a); // 10
	printf("%d\n", b); // 20

	return 0;
}

4. 嵌套命名空间使用

#include <stdio.h>

namespace hhb
{
	int a = 10;
	namespace hhz
	{
		int b = 20;
	}
}


int main()
{
	printf("%d\n", hhb::a); // 10
	printf("%d\n", hhb::hhz::b); // 20
	
	return 0;
}

也可以直接将hhz展开

using namespace hhb::hhz;

int main()
{
	printf("%d\n", hhb::a); // 10
	printf("%d\n", b); // 20
	
	return 0;
}

三、 C++输入&输出

std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中

#include <iostream>

using namespace std;

int main()
{
	int a = 0;
	float b = 0.0f;
	double c = 0.0;
	cout << "hello csdn" << endl;

	cin >> a;
	cin >> b;
	cin >> c;


	cout << a << endl;
	cout << b << endl;
	cout << c << endl;

	return 0;
}

在这里插入图片描述

  1. 使用cout标准输出对象(控制台)和cin准标输入对象(键盘)时,必须包含< iostream >头文件
    以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
    iostream >头文件中。
  3. <<是流插入运算符,>>是流提取运算符
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
    C++的输入输出可以自动识别变量类型

注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;因此推荐使用< iostream >+std的方式。

#include <iostream>

using namespace std;
int main()
{
	int a = 10;
	float b = 3.14f;
	double c = 100.999;

	cout << a << endl;

	cout << b << endl;

	cout << c << endl;

	return 0;
}

在这里插入图片描述
std命名空间的使用惯例:

  1. 在日常练习中,建议直接using namespace std。
  2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 + using std::cout展开常用的库对象/类型等方式。

总结

C++命名空间的定义、C++命名空间的使用、C++输入&输出等的介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

天才程序员周弈帆 | Stable Diffusion 解读(二):论文精读

本文来源公众号“天才程序员周弈帆”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Stable Diffusion 解读&#xff08;二&#xff09;&#xff1a;论文精读 【小小题外话】端午安康&#xff01; 在上一篇文章天才程序员周弈帆 …

C#操作MySQL从入门到精通(14)——汇总数据

前言 我们有时候需要对数据库查询的值进行一些处理,比如求平均值等操作,本文就是详细讲解这些用法,本文测试使用的数据库数据如下: 1、求平均值 求所有student_age 列的平均值 string sql = string.Empty; if (radioButton_AVG.Checked) {sql = “select AVG( student_…

《Vue》系列文章目录

Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以…

真北游记|三江交汇,碧海苍梧,端午去梧州吃龟苓膏

准备 t-14&#xff1a;高铁抢票&#xff08;A&#xff09; t-14&#xff1a;订行程(B)酒店&#xff08;C&#xff09; T-2&#xff1a;准备水、零食 T-1&#xff1a;物质准备&#xff1a;衣服、纸巾、毛巾、雨伞&#x1f302;、拖鞋、口罩&#x1f637;&#xff08;D&#xff0…

phpstudy的安装dvwa

phpstudy安装dvwa 1. 下载phpstudy Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn) 2. 搭建dvwa靶场 下载地址&#xff1a;https://github.com/ethicalhack3r/DVWA/archive/master.zip 将其放入www文件夹中 3. 修改配置文件 将\DVWA-master\config中config.inc.php…

【深度揭秘】ChatGPT如何成为智能对话的领头羊?万字详解其背后的核心技术!

最近&#xff0c;OpenAI的预训练模型ChatGPT给人工智能领域的研究人员留下了深刻的印象和启发。毫无疑问&#xff0c;它非常强大&#xff0c;与之交流十分有趣&#xff0c;还能编写代码。它在多个方面的表现远超自然语言处理研究者的预期。因此&#xff0c;我们不禁要问&#x…

Nginx之正向代理配置示例和说明

一、NGINX正向代理功能简介 Nginx的正向代理功能允许局域网中的客户端通过代理服务器访问Internet资源。具体来说&#xff0c;Nginx作为一种流行的Web服务器和反向代理服务器&#xff0c;在正向代理方面的应用也相当实用。以下是其正向代理功能的几个关键点&#xff1a; 访问外…

[AI Google] 使用 Gemini 取得更多成就:试用 1.5 Pro 和更多智能功能

总结 Google 正在为超过 35 种语言的 Gemini Advanced 订阅者推出 Gemini 1.5 Pro。此次更新包括 100 万个 token 的上下文窗口、改进的数据分析功能和增强的多模态图像理解。新功能包括用于自然对话的 Gemini Live、先进的规划工具和可定制的 Gems。更新还集成了更多 Google …

【Python项目】——爬虫爬取柯南的剧集数和集名(有错求指点)

项目目的&#xff1a;因为柯宝除了在CSDN写博客这一爱好外&#xff0c;还比较喜欢追番剪辑&#xff0c;尤其是柯南&#xff0c;想到了爬取这个&#xff01;&#xff01;参考Github大佬&#xff0c;原项目链接&#xff1a; 原作者Githubhttps://github.com/LorentzForceWorkEnz…

博客摘录「 AXI三种接口及DMA DDR XDMA介绍(应用于vivado中的ip调用)」2024年6月10日

关键要点&#xff1a; 1.AXI Stream经过协议转换可使用AXI_FULL&#xff08;PS与PL间的接口&#xff0c;如GP、HP和ACP&#xff09;。 2.传输数据类里就涉及一个握手协议&#xff0c;即在主从双方数据通信前&#xff0c;有一个握手的过程。基本内容&#xff1a;数据的传输源会…

Docker与Docker-Compose详解

1、Docker是什么&#xff1f; 在计算机中&#xff0c;虚拟化(英语: Virtualization) 是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&#xff0c;打破实体结构间的不可切割的障碍&…

【服务实现读写分离】

文章目录 什么是读写分离基于Spring实现实现读写分离项目中常用的数据源切换依赖包 什么是读写分离 服务读写分离&#xff08;Service Read-Write Splitting&#xff09;是一种常见的数据库架构设计模式&#xff0c;旨在提高系统的性能和可扩展性。通过将读操作和写操作分离到…

ChatTTS改良版 - 新增精选高品质音色,新增超长文本推理,新增api接口

这个版本是ChatTTS的一个分支&#xff0c;基于ChatTTS修改&#xff0c;由6drf21e大佬改良&#xff0c;大佬GitHub地址 GitHub - 6drf21e/ChatTTS_colab: &#x1f680; 一键部署&#xff08;含离线整合包&#xff09;&#xff01;基于 ChatTTS &#xff0c;支持音色抽卡、长音频…

SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Redis 概述 1.1 Redis 下载与安装 2.0 Redis 数据类型 3.0 Redis 常见五种类型的命令 3.1 字符串操作命令 3.2 哈希操作命令 3.3 列表操作命令 3.4 集合操作命令 …

【面试干货】 B 树与 B+ 树的区别

【面试干货】 B 树与 B 树的区别 1、B 树2、 B 树3、 区别与优缺点比较4、 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库系统中&#xff0c;B 树和 B 树是常见的索引结构&#xff0c;它们在存储和组织数据方面有着不同的设计…

树莓派4B 零起点(三) 树莓派 VNC 远程桌面配置(1)

目录 一、启用树莓派4B的 VNC 服务 二、在PC的操作系统上安装VNC客户端 1、下载安装 RealVNC 2、下载安装 TigerVNC 三、登录VNC远程桌面 1、通过使用 ifconfig 查看树莓派的 IP 地址 2、启动 TigerVNC 客户端&#xff08;Windows版本演示&#xff09; 在前两章的基础下…

【C++修行之道】类和对象(六)再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元|匿名对象|拷贝时一些编译器优化

目录 一、再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1. 所有的成员,既可以在初始化列表初始化,也可以在函数体内初始化 2. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 3. 类中包含以下成员&#xff0c;必须放在初始化列表位置进行初始化&…

SpringBoot个人网盘系统-计算机毕业设计源码92922

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势或改善自身的缺点&#xff0c;互联网的发展文件管理带来了福音。个人网盘系统是以实际运用为开发背景&#xff0c;运用软件工程原理和…

分析示例 | Simufact焊接工艺仿真变形精确预测汽车结构

导语 焊接是汽车制造过程中一个关键环节&#xff0c;白车身、发动机、底盘和变速箱等都离不开焊接工艺的应用&#xff0c;主要涉及气保焊、电阻点焊、激光焊、电子束焊等多种焊接工艺。由于汽车车型众多、成形结构复杂、汽车制造质量、效率、成本等方面的综合要求。如何高效、…

WDF驱动开发-PNP和电源管理(三)

对于PNP设备来说&#xff0c;理解它们的启动和删除顺序&#xff0c;以及意外移除顺序非常重要&#xff0c;在早期&#xff0c;经常有拔插U盘导致windows重启的例子&#xff0c;这就是意外移除带来的问题。 功能或Filter驱动程序的启动顺序 下图显示了框架调用 WDF (KMDF 和 U…