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开发&…

近邻算法的详细介绍

近邻算法&#xff08;Nearest Neighbor Algorithm&#xff09;&#xff0c;通常称为 k-近邻算法&#xff08;k-Nearest Neighbors&#xff0c;简称 k-NN&#xff09;&#xff0c;是一种基本的分类和回归方法。它的工作原理非常直观&#xff1a;通过测量不同特征值之间的距离来进…

Matlab速通知识点(半小时速通)

#跟着网上课程学习了matlab的基础用法&#xff0c;在这里给大家整合出来&#xff0c;形成知识点的形式&#xff0c;以便大家查阅或者学习&#xff0c;知识点全&#xff0c;有注解~ %% a[1,2,3;4,5,6;7,8,9];%矩阵写法b1:1:10;%开始&#xff1a;步长&#xff1a;结束c1:10;%遇上…

热题系列章节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;&…

rocketmq做了哪些事情来提高性能

在中间件和消息队列的领域内&#xff0c;Apache RocketMQ是一个高性能、高吞吐量的分布式消息中间件&#xff0c;它被广泛应用于处理大规模消息服务的构建中。为了达到这样的性能标准&#xff0c;RocketMQ不仅在架构设计上进行了优化&#xff0c;还在代码层面进行了大量的重构和…

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

好多年前就听到这样的说法&#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创建或选择一个头…

Flutter金融理财类APP常用的第三方库总汇

Flutter金融理财类APP常用的第三方库总汇 金融理财类APP在现代社会中扮演着越来越重要的角色&#xff0c;为用户提供了便捷的金融服务和投资渠道。Flutter作为一个高效的跨平台移动应用开发框架&#xff0c;能够帮助开发者快速构建这类应用。本文将汇总Flutter金融理财类APP开…

Java中的动态代理机制及其应用

动态代理(Dynamic Proxy)是Java语言中一种强大的特性,允许在运行时动态地创建代理类。代理类可以拦截对目标对象的所有方法调用,并在调用前后执行一些额外的逻辑。动态代理在Java的许多框架中得到了广泛应用,比如Spring AOP(面向切面编程)、Hibernate、MyBatis等。本文将…

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

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

vue实现stompjs+websocket和后端通信(二)

vue项目的搭建在这里就不说了&#xff0c;网上有很多教程。大家自行百度。前端使用stompwebsocket有很多的实现版本。这里只讲stomp/stompjs方式实现。 导入 使用stomp/stompjs需要执行安装命令&#xff1a; import Stomp from stomp/stompjs; 然后在组件中引入即可&#xff…

探索国内大模型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…

web前端电影简介标签:深度解析与创意应用

web前端电影简介标签&#xff1a;深度解析与创意应用 在web前端开发中&#xff0c;电影简介标签的设计与实现是一项既具挑战性又充满创意的任务。这些标签不仅需要准确传达电影的核心信息&#xff0c;还要通过精美的设计和交互效果吸引用户的眼球。本文将从四个方面、五个方面…