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); // 1return 0;
}
  1. 命名空间名::变量名,访问指定命名空间域。
#include <stdio.h>int a = 1;namespace hhb
{int a = 10;
}int main()
{int a = 0;printf("%d\n", hhb::a); // 10return 0;
}

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

  1. 局部变量和全局变量先访问局部变量
#include <stdio.h>int a = 1;int main()
{int a = 0;printf("%d\n", a); // 0return 0;
}
  1. 没有局部变量,编译器到全局域寻找变量
#include <stdio.h>int a = 1;int main()
{printf("%d\n", a); // 1return 0;
}
  1. 命名空间域和全局域都存在变量,会在全局作用域中寻找变量
#include <stdio.h>int a = 1;namespace hhb
{int a = 10;
}int main()
{printf("%d\n",a); // 1return 0;
}

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

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

#include <stdio.h>int a = 1;namespace hhb
{int a = 10;
}int main()
{int a = 0;printf("%d\n", hhb::a); // 10return 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); // 10printf("%d\n", b); // 20return 0;
}

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

  • 直接将命名空间展开。
#include <stdio.h>namespace hhb
{int a = 10;int b = 20;
}using namespace hhb;int main()
{printf("%d\n", a); // 10printf("%d\n", b); // 20return 0;
}

4. 嵌套命名空间使用

#include <stdio.h>namespace hhb
{int a = 10;namespace hhz{int b = 20;}
}int main()
{printf("%d\n", hhb::a); // 10printf("%d\n", hhb::hhz::b); // 20return 0;
}

也可以直接将hhz展开

using namespace hhb::hhz;int main()
{printf("%d\n", hhb::a); // 10printf("%d\n", b); // 20return 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++输入&输出等的介绍。

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

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

相关文章

向AI请教如何说不

面对父母的催婚&#xff0c;你可以采取以下几个步骤来进行沟通和表达自己的立场&#xff1a; 理解与尊重&#xff1a;首先&#xff0c;要理解父母催婚背后的关心和期望。他们可能出于对你未来幸福和生活稳定的考虑。表达对他们关心的感激&#xff0c;这有助于建立良好的沟通基础…

超详解——python条件和循环——小白篇

目录 1. 缩进和悬挂else 2. 条件表达式 3. 和循环搭配的else 4. 可调用对象 总结&#xff1a; 1. 缩进和悬挂else 在Python中&#xff0c;代码块是通过缩进来表示的。条件判断和循环结构的代码块需要正确缩进。悬挂else指的是else子句和相应的if或循环在同一级别的缩进。 …

⌈ 传知代码 ⌋ 基于曲率的图重新布线

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

扩散模型Stable Diffusion

扩散模型构成 Text Encoder(CLIPText) Clip Text为文本编码器。以77 token为输入&#xff0c;输出为77 token 嵌入向量&#xff0c;每个向量有768维度。 Diffusion(UNetScheduler) 在潜在空间中逐步处理扩散信息。以文本嵌入向量和由噪声组成的起始多维数组为输入&#xff0c…

1909java内部知识管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java内部知识管理系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开 发环境为TOMCAT7.0,Myeclipse8.5开发&…

热题系列章节5

169. 多数元素 给定一个大小为 n 的数组&#xff0c;找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,2] 输出:…

数据仓库核心:事实表深度解析与设计指南

文章目录 1. 引言1.1基本概念1.2 事实表定义 2. 设计原则2.1 原则一&#xff1a;全面覆盖业务相关事实2.2 原则二&#xff1a;精选与业务过程紧密相关的事实2.3 原则三&#xff1a;拆分不可加事实为可加度量2.4 原则四&#xff1a;明确声明事实表的粒度2.5 原则五&#xff1a;避…

数据结构(4):串

只需要掌握小题&#xff0c;在考纲中占比不大 1 串的定义 1.1 基本定义 字符串 数据结构三要数&#xff1a;逻辑结构、存储结构、运算 子串必须是连续的&#xff01; 空格也是一个字符&#xff01;每个空格字符占1B 1.2 串和线性表 2 串的基本操作 比值的操作&#xff01;&…

走的人多了,也便成了路(七)

好多年前就听到这样的说法&#xff1a;一流的企业做标准&#xff0c;二流的企业做品牌&#xff0c;三流的企业做产品。 在通信行业待久了&#xff0c;经历了移动通信技术标准的发展历程&#xff0c;体会到很多事情没有那么神秘&#xff0c;甚至由于一些偶然因素的出现&#xff…

AIGC之MetaHuman:HeyGen(基于AI驱动的视频生成平台+数字人)的简介、安装和使用方法、案例应用之详细攻略

AIGC之MetaHuman&#xff1a;HeyGen(基于AI驱动的视频生成平台数字人)的简介、安装和使用方法、案例应用之详细攻略 目录 HeyGen的简介 1、HeyGen是一款AI视频生成平台&#xff0c;它提供以下关键功能&#xff1a; HeyGen的安装和使用方法 1、使用方法 01创建或选择一个头…

数据中心基础设施智能运维

数据中心基础设施智能运维 随着科技的飞速发展&#xff0c;数据中心作为信息社会的核心基础设施&#xff0c;扮演着越来越重要的角色。然而&#xff0c;传统的运维模式由于对人力资源的高度依赖&#xff0c;已无法满足现代数据中心对高效、安全和可持续运维的要求。华为的《数…

探索国内大模型AIGC产品

​ 人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗…

2. keepalived结合LVS配合使用

keepalived结合LVS配合使用 1、后端nfs存储提供项目文件2、后端nfs上集中安装MySQL&#xff0c;共用数据库3、业务服务器通过LNMP正常部署wordpress博客&#xff0c;客户端通过DNS解析可正常访问4、所有业务服务器上修改arp参数、配置VIP5、配置keepalived实现LVS高可用5.1 kee…

Python私教张大鹏 Vue3整合AntDesignVue之Dropdown 下拉菜单

基本用法 核心代码&#xff1a; <template><a-dropdown><a class"ant-dropdown-link" click.prevent>Hover me<DownOutlined /></a><template #overlay><a-menu><a-menu-item><a href"javascript:;"…

软件心学格物致知篇(7)软件开发文档写什么

软件心学格物致知篇(7)软件开发文档写什么 前言 当今约束大家生产力的有哪些因素&#xff1f;是编程语言&#xff1f;开发框架&#xff1f;开发IDE&#xff1f;还是自身迫切需要更高水平的技能&#xff1f; 好像上面的每一项技术都在不断发展&#xff0c;也在不断的为我们生…

Spring Event如何优雅实现系统业务解耦

Spring Event如何优雅实现系统业务解耦 一、介绍 Spring事件&#xff08;Spring Event&#xff09;是Spring框架的一项功能&#xff0c;它允许不同组件之间通过发布-订阅机制进行解耦的通信。在Spring中&#xff0c;事件是表示应用程序中特定事件的对象&#xff0c;例如用户注…

在win11系统上安装启动Hyper-V

Hyper-V 是微软公司开发的一种虚拟化技术&#xff0c;它允许一台物理计算机运行多个操作系统和应用程序&#xff0c;从而提供更好的资源利用率和系统灵活性。 win系统的linux子系统开启、android studio的虚拟环境都需要这个东西&#xff0c;而在初始的win11系统上可能没有这个…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:电力巡检智能机器人

聚焦数字经济与双碳经济赛道&#xff0c;专注于提供集中式新能源场站与分布式综合能源数智化整体解决方案&#xff0c;坚持以场站数字化、综合能源数字化双轮驱动发展。依靠专业化人才队伍与丰富的实证基地研究经验&#xff0c;打造成熟、先进的数智新能源研发平台。 在集中式新…

Docker Swarm集群部署管理

Docker Swarm集群管理 文章目录 Docker Swarm集群管理资源列表基础环境一、安装Docker二、部署Docker Swarm集群2.1、创建Docker Swarm集群2.2、添加Worker节点到Swarm集群2.3、查看Swarm集群中Node节点的详细状态信息 三、Docker Swarm管理3.1、案例概述3.2、Docker Swarm中的…

【Web世界探险家】3. CSS美学(二)文本样式

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…