【C++起飞之路】初级——命名空间、输入输出流

news2024/9/23 15:30:54

C++:命名空间、输入输出流

  • 一、命名空间
    • 1、命名空间的定义
    • 2、命名空间中成员的使用
      • 非嵌套命名空间:
      • 嵌套命名空间:
    • 3、命名空间 三种展开方式
      • <1>指定命名空间访问
      • <2> using声明
        • a、using引入某个成员
        • b、using展开命名空间
        • ❗注意:头文件不应包含using声明
    • 4、总结
  • 二、输入输出流
    • 1、cin / cout 标准输入 / 输出
    • 2、endl 换行

为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)

一、命名空间

当我们编写代码时,可能会产生一些命名冲突,为了解决这一冲突引出了命名空间的概念

命名冲突的产生主要包括两个方面原因:

  • 1、与库函数名冲突
  • 2、工程中的冲突(比如多人共同完成一个项目时,写了两个同名函数)

1、命名空间的定义

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

语法格式:

namespace name
{
    //variables, functions, classes
    //(命名空间中可以定义变量/函数/类型)
}

name是命名空间的名字(当然可以自定义),命名空间中可以包含变量、函数、类等

❗注意:
一个命名空间就定义了一个新的作用域(可以把命名空间叫做命名空间域),命名空间中的所有内容都局限于该命名空间中。

命名空间的 四个特点
Ⅰ 命名空间名字不可以和关键字重名,除了关键字可以随便取(最好根据命名空间的意义取)

Ⅱ 命名空间中可以包含变量、函数、类、typedef、#define等,十分自由

Ⅲ 命名空间可以嵌套定义

Ⅳ 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。这种情况下,命名空间几乎丧失了作用,因为存在命名冲突的话依然会报错

演示:

Ⅰ、Ⅱ:
在这里插入图片描述

Ⅲ :

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

2、命名空间中成员的使用

在这里插入图片描述
为什么报错呢?

在引用命名空间成员时,要用 命名空间名域作用限定符 对命名空间成员进行限定,以区别不同的命名空间中的同名标识符。

命名空间使用的关键是 域作用限定符: ::

::的左边为域,如果有命名空间域,则限定访问命名空间域中的内容;如果域左边为空,访问的就是全局域,会直接到全局范围内找 :: 右边的变量或其他成员。

非嵌套命名空间:

C++中访问的时候的默认顺序是:
局部域 -> 全局域 -> 展开了的命名空间域 or 指定访问命名空间域

在这里插入图片描述

嵌套命名空间:

通过::深入访问命名空间,如图:
在这里插入图片描述

3、命名空间 三种展开方式

<1>指定命名空间访问

我们上面所有的例子都是指定命名空间访问

<2> using声明

上面的方法显得比较烦琐,我们每次使用某个命名空间的成员的时候需要不停的用 :: 展开,然而幸运的是,通过更简单的途径也能使用到命名空间中的成员。

其中一种最安全的方法,就是使用using声明

有了using声明就无须专门的前缀(形如命名空间::)也能使用所需的名字了

a、using引入某个成员

语法:using name::x

每个名字都需要独立的using声明
在这里插入图片描述

b、using展开命名空间

语法:using namespace name;

在这里插入图片描述

❗注意:头文件不应包含using声明

位于头文件的代码一般来说不应该使用using声明

这是因为头文件的内容会拷贝到所有引用它的文件中去:

如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明。对于某些程序来说,由于不经意间包含了一些名字,反而可能产生始料未及的名字冲突

4、总结

命名空间的展开就是为了对标识符的名称进行本地化,以避免命名冲突或名字污染,因此对于不同的情况有不同的展开方式

👉如何展开C++标准库的命名空间使用更合理呢?

  1. 在日常练习中,直接using namespace name即可,这样就很方便
  2. using namespace name展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 + using std::cout展开常用的库对象/类型等方式。

🔺即:

  • 多人合作完成的项目:常用的部分展开(using),不常用的指定命名空间展开(命名空间::成员),安全严谨
  • 平时练习:全局展开,快捷高效

二、输入输出流

C++语言并未定义任何输入输出(IO)语句,取而代之,包含了一个全面的标准库来提供IO机制

👉iostream库
iostream库包含两个基础类型istream和 ostream,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备读出或写入IO设备的。术语 “流” ( stream)想要表达的是,随着时间的推移,字符是顺序生成或消耗的。
在这里插入图片描述

1、cin / cout 标准输入 / 输出

说明:

    1. 使用cout(读音同" see out “)标准输出对象(控制台)和cin(读音同” see in ")标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std命名空间
    1. coutcin 是全局的流对象,
    1. <<是流插入运算符,>>是流提取运算符。
    1. 使用C++输入输出更方便,不需要像printf / scanf输入输出时那样,需要手动控制格式。
    1. C++的输入输出可以自动识别变量类型
    1. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,实际上并不简单,后面遇到了再说

2、endl 换行

endl是特殊的C++符号,表示换行输出。
cincout一样,都包含在包含<iostream >头文件中。
在这里插入图片描述在这里插入图片描述

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

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

相关文章

离散化(算法)

目录 一、离散化的概念二、离散化的模板三、离散化的应用题目思路分析代码实现 一、离散化的概念 离散化是一种将连续数据映射到离散值的过程。它通常用于优化某些算法&#xff0c;尤其是与区间查询相关的问题。 在离散化过程中&#xff0c;我们将一组实数转换为一组整数&#…

美团企业版背后,费控和「know-how」的双重苦战

在企业消费管理的赛道里&#xff0c;美团不能算新手&#xff0c;但客观来看&#xff0c;也并不算是熟练的玩家。对这家中国骨灰级的玩家而言&#xff0c;这不仅是一场费控报销的仗&#xff0c;更是一个从C到B的观念转型之路。 作者|思杭 编辑|皮爷 出品|产业家 美团再出招。 …

从零构建自己的脚手架

从零构建自己的脚手架 简介 什么是CLI CLI 全称是 Command Line Interface&#xff0c;是一类通过命令行交互的终端工具。日常工作中常用的脚手架有 vue-cli、create-react-app、angular-cli 等&#xff0c;都是通过简单的初始化命令&#xff0c;完成内容的快速构建。 为什…

Unity Audio -- (3)创建3D音效

本节会添加场景中小瀑布的音效。小瀑布的音效会有一个作用范围&#xff0c;也会根据角色所处的位置不同&#xff0c;产生不同的效果。 添加小瀑布的声音 1. 在Hierarchy中&#xff0c;点击右键&#xff0c;选择Audio -> Create Audio Source&#xff0c;将这个新的Audio So…

HEVC学习之去方块滤波

一、概要 视频编码为视频带来的压缩伪影呈现出的效果各有不同&#xff0c;但其原因总结起来为高频信息的失真以及基于块的编码消除了块与块之间的相似性。 为了弥补基于块的编码带来的影响&#xff0c;HEVC中引入了去方块滤波。 AVC中采取对44块的边界进行去方块滤波&#xf…

通过自定义域名 + SSL 的方式访问 Amazon MQ for RabbitMQ

引言&#xff1a; 一般为了解决应用解耦&#xff0c;异步处理&#xff0c;流量削峰等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性的架构&#xff1b;我们会引入消息队列中间件来完善架构设计。 对于需要消息传递协议的应用程序&#xff0c;…

CCFCSP 201409-2 画图

思路上很容易想到即使用一个标记数组对上过色的模块进行标记&#xff0c;最后遍历该数组得到被标记的模块数即可 #include<iostream>using namespace std;int mapp[105][105]; int ans0;int main(){int n;cin>>n;for(int i0;i<n;i){int x1,y1,x2,y2;cin>>…

【P15】JMeter 正则表达式提取器(Regular Expression Extractor)

文章目录 一、准备工作二、测试计划设计 一、准备工作 慕慕生鲜&#xff1a; http://111.231.103.117/#/login 进入网页后&#xff0c;登录&#xff0c;页面提供了账户和密码 搜索框输入“虾” 右键检查或按F12&#xff0c;打开调试工具&#xff0c;点击搜索 二、测试计划设…

【Java项目】SpringCloud项目注册到Nacos中心时显示的是内网IP导致不同服务器之间无法互相调用接口的解决并发

微服务项目地址—动动你发财的小手点一个stars吧 出现这个问题是之前我也就遇到过的&#xff0c;这个问题的情况就是&#xff1a; 我们知道微服务项目是可以把不同的项目部署在不同的服务器上从而减少某一台服务器的压力&#xff0c;我们只需要为每一个服务配置一个注册中心即…

计算机基础--计算机存储单位

一、介绍 计算机中表示文件大小、数据载体的存储容量或进程的数据消耗的信息单位。在计算机内部&#xff0c;信息都是釆用二进制的形式进行存储、运算、处理和传输的。信息存储单位有位、字节和字等几种。各种存储设备存储容量单位有KB、MB、GB和TB等几种。 二、基本存储单元…

【进阶知识】显示管理器,窗口管理器,桌面环境/桌面管理器,显示服务器

文章目录 一、显示管理器&#xff08;Display Manager&#xff09;1.1 什么是 Linux 中的显示管理器&#xff1f;1.2 不同的显示管理器1.3 其他控制台显示管理器图形界面显示管理器 二、窗口管理器&#xff08;Window Manager&#xff09;三、桌面环境/桌面管理器&#xff08;D…

AD9680之JESD204B接口2路、4路、8路的14bit 500MSPS/1GSPS/1.25GSPS采样率子卡的中文版本设计及调试经验资料分享

板卡概述&#xff1a; 【FMC155】 FMC155 是一款基于 VITA57.1 标准的&#xff0c;实现 2 路 14-bit、500MSPS/1GSPS/1.25GSPS 直流耦合 ADC 同步采集 FMC 子卡模 块。 该模块遵循 VITA57.1 规范&#xff0c;可直接与 FPGA 载卡配合使用&#xff0c;板 卡 ADC 器件采用 ADI 的…

MySQL基础篇补充 | 单行函数(数值函数、字符串函数、日期函数、流程控制函数、加密与解密函数、MySQL信息函数)

目录 一&#xff1a;单行函数 1. 数值函数 &#xff08;1&#xff09;基本函数 &#xff08;2&#xff09;角度与弧度互换函数 &#xff08;3&#xff09;三角函数 &#xff08;4&#xff09;指数与对数 &#xff08;5&#xff09;进制间的转换 2. 字符串函数 3. 日期和…

Nginx配置浏览器缓存,页面展示更快一步

1.简介 缓存能够存储请求的响应结果&#xff0c;可以很方便的再次访问&#xff0c;使用缓存的优点是很明显的。 加速内容的访问&#xff0c;降低响应时间减少服务器的负载 Nginx不仅仅是一个web服务器&#xff0c;它也是一个web缓存服务器。通过Nginx缓存&#xff0c;我们对…

Java引用类型(强引用,软引用,弱引用,虚引用)

从Java SE2开始&#xff0c;就提供了四种类型的引用&#xff1a;强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的&#xff1a;第一是可以让程序员通过代码的方式决定某些对象的生命周期&#xff1b;第二是有利于JVM进行垃圾回收。 强引用&#xff08…

【Linux环境】Linux常用命令记录汇总

Linux常用命令记录汇总 一、传输命令二、打包命令三、创建文件夹或文件命令四、切换用户五、vim相关命令六、权限更改命令 一、传输命令 命令格式&#xff1a; rz 点击回车 sz 文件名 点击回车命令解释&#xff1a; rz&#xff08;receive Zmodem缩写&#xff09;上传文件&am…

淘宝时光机入口在哪里怎么打开回溯20年淘宝历史账单?

淘宝时光机入口在哪里怎么打开&#xff1f; 打开淘宝时光机入口&#xff1a;https://www.caochai.com/article-4208.html &#xff0c;开始回溯20年淘宝历史账单&#xff1b; 淘宝大额内部隐藏优惠券怎么领取&#xff1f; 1、打开淘宝优惠券查询领取入口&#xff1a;https://…

上班摸鱼逛博客,逮到一个字节8年测试开发,聊过之后羞愧难当......

老话说的好&#xff0c;这人呐&#xff0c;一旦在某个领域鲜有敌手了&#xff0c;就会闲得某疼。前几天我在上班摸鱼刷博客的时候认识了一位字节测试开发大佬&#xff0c;在字节工作了8年&#xff0c;因为本人天赋比较高&#xff0c;平时工作也兢兢业业&#xff0c;现在企业内有…

好家伙,一天约了6场面试,又被吊打了....

好兄弟一天约了6场面试&#xff0c;又被吊打了 面试感受 先说一个字 是真的 “ 累 ” 安排的太满的后果可能就是一天只吃一顿饭&#xff0c;一直奔波在路上 不扯这个了&#xff0c;给大家说说面试吧&#xff0c;我工作大概两年多的时间&#xff0c;大家可以参考下 在整个面试…

mysql 连表查询

文章目录 一、内连接二、外连接2.1 左外连接2.2 右外连接 三、总结 写在前面 在MySQL中join操作被称为连接&#xff0c;作用是能连接多个表的数据&#xff08;通过连接条件&#xff09;&#xff0c;从多个表中获取数据合并在一起作为结果集返回给客户端。即使用连接查询一条SQL…