C++从入门到起飞之——输入输出!
目录
1.命名空间
1.1namespace的价值
1.2namespace的定义
1.3命名空间使⽤
2.C++输⼊&输出
3.完结散花
![]()
个人主页:秋风起,再归来~
C++从入门到起飞
个人格言:悟已往之不谏,知来者犹可追
克心守己,律己则安!
1.命名空间
1.1namespace的价值
c语⾔项⽬类似下⾯程序这样的命名冲突是普遍存在的问题,C++引⼊namespace就是为了更好的解决 这样的问题
#include<stdio.h>
//#include<stdlib.h>int rand = 10;int main()
{printf("%d\n",rand);
}
运行时编译没有报错!
将头文件<stdlib.h>放开,有报错!
#include<stdio.h>
#include<stdlib.h>
int rand = 10;
int main()
{printf("%d\n",rand);
}
报错的原因就在于,当我们将头文件<stdlib.h>放开,在编译预处理阶段,编译器会将头文件自动展开,而头文件<stdlib.h>中包含函数rand,这时在全局域中就一个全局变量rand,并且有一个函数名为rand因此发生命名冲突!
在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全 局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名 冲突或名字污染,namespace关键字的出现就是针对这种问题的。
1.2namespace的定义
• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。
namespace Test
{//变量int rand;//函数void func(){return;}//类,后面会讲到class test{public:void Test(){return;}private:int a;int b;};
}
• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。
• C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响 编译查找逻辑,还会影响变量的声明周期,命名空间域和类域不影响变量声明周期。
• namespace只能定义在全局,当然他还可以嵌套定义。
//命名空间的嵌套定义
namespace Test2
{int a=10;namespace Test3{int a = 10; }
}
• 项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。
• C++标准库都放在⼀个叫std(standard)的命名空间中。
>开始C语言中命名冲突的问题现在就可以用命名空间来解决了!
#include<stdlib.h>
namespace Test
{int rand = 10;
}
int main()
{// 这⾥默认是访问的是全局的rand函数指针(即rand函数返回一个地址)printf("%p\n", rand);// 这⾥指定Test命名空间中的rand(后面会讲命名空间的使用)printf("%d\n", Test::rand);
}
1.3命名空间使⽤
编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。
所以我们要使⽤命名空间中定义的变量/函数,有三种⽅式:
• 指定命名空间访问,项⽬中推荐这种⽅式。
• using将命名空间中某个成员展开,项⽬中经常访问的不存在冲突的成员推荐这种⽅式。
namespace Test
{int a = 10;int b = 20;
}
using Test::a;//a成员被打开int main()
{printf("a=%d,b=%d\n", a, Test::b);return 0;
}
• 展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。
namespace Test
{int a = 10;int b = 20;
}
using namespace Test;//打开命名空间的全部成员int main()
{printf("a=%d,b=%d\n", a, b);return 0;
}
2.C++输⼊&输出
• <iostream>是Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输 出对象。
• std::cin 是 istream 类的对象,它主要⾯向窄字符(narrow characters (of type char))的标准输 ⼊流。
• std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。
• std::endl是⼀个函数,流插⼊输出时,相当于插⼊⼀个换⾏字符加刷新缓冲区。
• >是流提取运算符。(C语⾔还⽤这两个运算符做位运算左移/右移)
• 使⽤C++输⼊输出更⽅便,不需要像printf/scanf输⼊输出时那样,需要⼿动指定格式,C++的输⼊ 输出可以⾃动识别变量类型(本质是通过函数重载实现的,这个以后会讲到),其实最重要的是 C++的流能更好的⽀持⾃定义类型对象的输⼊输出。
• IO流涉及类和对象,运算符重载、继承等很多⾯向对象的知识,这些知识我们还没有讲解,所以这 ⾥我们只能简单认识⼀下C++IO流的⽤法,后⾯我们会有专⻔的⼀个章节来细节IO流库。
• cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,所以要 通过命名空间的使⽤⽅式去⽤他们。
• ⼀般⽇常练习中我们可以using namespace std,实际项⽬开发中不建议using namespace std。
• 这⾥我们没有包含<stdio.h>,也可以使⽤printf和scanf,在包含间接包含了。vs系列 编译器是这样的,其他编译器可能会报错
#include<iostream>
using namespace std;//日常小练习和OJ刷题推荐使用,大型项目不推荐,风险太大int main1()
{int a = 10;double b = 5.9;char c = 'h';cout <<"a="<< a << " b=" << b << " c=" << c << endl;//自动识别类型printf("a=%d b=%0.1lf c=%c\n", a, b, c);return 0;
}int main()
{int a = 10;double b = 5.9;char c = 'h';cin >>a >> b >> c;//可以自动识别类型cout << "a=" << a << " b=" << b << " c=" << c << endl;//自动识别类型printf("a=%d b=%0.1lf c=%c\n", a, b, c);return 0;
}
>在io需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码, 可以提⾼C++IO效率
#include<iostream>
using namespace std;
int main()
{// 在io需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码// 可以提⾼C++IO效率ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return 0;
}
3.完结散花
好了,这期的分享到这里就结束了~
如果这篇博客对你有帮助的话,可以用你们的小手指点一个免费的赞并收藏起来哟~
如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~
我们下期不见不散~~
相关文章:

C++从入门到起飞之——输入输出!
目录 1.命名空间 1.1namespace的价值 1.2namespace的定义 1.3命名空间使⽤ 2.C输⼊&输出 3.完结散花 个人主页:秋风起,再归来~ C从入门到起飞 个人格言:悟已往之不谏,知来者犹可追 克心守己…...

米文AD10配置gmsl摄像头操作
一、进入桌面快捷方式 0、设置摄像头型号 miivii_websettings.desktop 设置摄像头 1、获取camera信息 cat /var/log/gmsl_camera.lognvidiamiivii-tegra:~$ cat /var/log/gmsl_camera.log attestationVerify [13] succeed. [INFO ]: miivii gmsl service start! [INFO ]: V…...

【Selenium配置】WebDriver安装浏览器驱动(ChromeEdge)
【Selenium配置】WebDriver安装浏览器驱动(Chrome&Edge) 文章目录 【Selenium配置】WebDriver安装浏览器驱动(Chrome&Edge)Chrome确认Chrome版本下载对应driver把解压后的chromedriver文件放在chrome安装目录下࿰…...
预测算法面试
这次面试的是一个预测算法的岗位。虽然我对供应链相关的预测很厌烦了,但是这个不是供应链领域的,感觉应该还好。 首先在介绍工作经历和项目部分,这次面试没有上来没有条理乱说一气,而是预测目标、算法架构、各种使用特征这些分层…...

号称世界上第一个开源实时翻译的 App,微软开源GraphRAG:极大增强大模型问答、摘要、推理,以及开源基于ChatGPT的超级文本代码智能体(附代码地址)
号称世界上第一个开源实时翻译的 App,微软开源GraphRAG:极大增强大模型问答、摘要、推理,以及开源基于ChatGPT的超级文本代码智能体(附代码地址) 在「端侧」上实现可离线的「实时同传」翻译,支持 29 语言的…...
PyTorch 2-深度学习-模块
PyTorch 2-深度学习-模块 一: pytorch1> pytorch 介绍2> pytorch 作用3> pytorch 优点4> pytorch 流程二:pytorch 模块1> torch.Tensor 模块2> torch.nn模块3> torch.nn.function模块4> torch.random模块5> torch.onnx模块6> torch.sparse模块7…...
【MyBatis】MyBatis 理论 40 问(二)
《MyBatis 理论 40 问》包含以下 2 篇文章: MyBatis 理论 40 问(一)MyBatis 理论 40 问(二) MyBatis 理论 40 问(二) 21.如何获取生成的主键?22.当实体类中的属性名和表中的字段名不…...

数据分析——Python网络爬虫(三){爬虫基本原理}
爬虫基本原理 爬虫基本流程拉取什么数据JavaScript渲染页面cookies爬虫代理检查robots.txt爬虫的攻与防 爬虫基本流程 • 获取网页源代码:通过库来实现,urllib,requests等实现http请求 • 提取信息:分析网页源代码࿰…...

Linux 忘记root密码,通过单用户模式修改
银河麒麟桌面操作系统 V10(sp1)”忘记用户密码,需要修改用户密码所写,可用于 X86 架构和 arm 架构。 2. 选择第一项,在上图界面按“e”键进行编辑修改。 3. 在以 linux 开头这行的行末,添加“init/bin/bas…...
安卓热门面试题二
什么是AndroidManifest.xml文件?它包含了哪些重要信息? AndroidManifest.xml文件是Android应用程序的全局配置文件,每个Android应用程序的根目录中都必须包含一个AndroidManifest.xml文件,且文件名不能修改。这个文件对于Android…...

agents 分类
一、分类 自动agent、半自动agent、领域、自定义sop和支持人为干预的agent。 先泼个冷水,目前这些agent项目都是实验品,发展还没有做知识库问答相关开源项目那么成熟, 二、全自动agent autoGPT、loopGPT、babyAGI 全自动agent就是人类不可…...
【期末考试复习】概率论与数理统计(知识点模式 - 复习题2)
题目: 设随机变量 X X X 的概率密度函数为 f ( x ) a b x f(x) a bx f(x)abx,其中 0 < x ≤ 1 0 < x \leq 1 0<x≤1; f ( x ) 0 f(x) 0 f(x)0,在其他情况下。已知 P ( X ≤ 1 / 2 ) 3 / 8 P(X \leq 1/2) 3/…...
Jetpack Compose实现一个简单的微信UI
https://blog.csdn.net/News53231323/article/details/128509048 https://franzliszt1847.blog.csdn.net/article/details/129344822...

myeclipse开发ssm框架项目图书管理系统 mysql数据库web计算机毕业设计项目
摘 要 随着计算机的广泛应用,其逐步成为现代化的标志。图书馆的信息量也会越来越大,因此需要对图书信息、借书信息、还书信息等进行管理,及时了解各个环节中信息的变更,要对因此而产生的单据进行及时的处理,为了提高高…...

网络安全防御 -- 防火墙安全策略用户认证综合实验
实验拓扑: 实验目的: 1、DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问。 2、生产区不允许访问互联网,办公区和游客区允许访问互联网。 3、办公区设备10.0.2.10不允许访问DM…...

捷配笔记-PCB阻焊颜色对产品有什么影响?
阻焊层也称为阻焊层或阻焊剂。它是一种薄的聚合物层,应用于(PCB)。阻焊层的目的是保护PCB表面,并有助于防止焊桥。焊桥是两个导体之间的无意连接,通常是由于存在一小块焊料。需要注意的是,阻焊层被视为其单…...

网信大数据信用报告查询怎么查?网信大数据有什么作用?
随着互联网的快速发展,大数据技术已经广泛应用于各行各业。其中,网信大数据信用报告查询成为了许多人关注的焦点。那么,如何查询网信大数据信用报告呢?网信大数据又有哪些作用呢?本文将为您一一解答。 一、如何查询网信大数据信用报告? 要…...
【Vue】vue-element-admin组件化功能
1. 组件的封装 在vue-element-admin中,每个功能区域或UI元素都被封装成一个或多个Vue组件。这些组件可以是简单的按钮、输入框,也可以是复杂的表格、表单或页面布局。每个组件都包含了其模板(HTML结构)、逻辑(JavaScr…...

[论文笔记]涨点近5%! 以内容中心的检索增强生成可扩展的级联框架:Pistis-RAG
引言 今天带来一篇较新RAG的论文笔记:Pistis-RAG: A Scalable Cascading Framework Towards Content-Centric Retrieval-Augmented Generation。 在希腊神话中,Pistis象征着诚信、信任和可靠性。受到这些原则的启发,Pistis-RAG是一个可扩展…...

时钟系统框图(时钟树)解析
时钟系统框图(时钟树)解析 文章目录 时钟系统框图(时钟树)解析1、时钟树2、 4个时钟源:HSI、HSE、LSI、LSE3、PLL锁相环倍频输出4、系统时钟的来源5、Enable CSS(时钟监视系统)6、几个重要的时钟…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...