C++入门——输入输出、缺省参数
C++入门——输入输出、缺省参数
一、C++标准库——命名空间 std
C++标准库std是一个命名空间,全称为"standard",其中包括标准模板库(STL),输入输出系统,文件系统库,智能指针与内存管理,字符串与文本处理等等,我们以输入输出流和标准模板库为例,简单地认识一下C++标准库里面有哪些内容:
1.输入输出系统
(1)流(Streams)
- 基础流:
iostream(cin,cout,cerr) - 文件流:
fstream,ifstream,ofstream - 字符串流:
stringstream,用于内存数据格式化
(2)格式化工具
std::format(C++20):类型安全字符串格式化- 本地化支持:
locale与wcout(宽字符输出)
2.标准模板库(STL)
(1) 容器(Containers)
- 序列容器:
vector,list,deque,array(C++11) - 关联容器:
map,set,unordered_map(C++11),unordered_set(C++11) - 适配器:
stack,queue,priority_queue
(2) 算法(Algorithms)
- 非修改序列操作:
find,count,for_each - 修改序列操作:
copy,transform,replace - 排序与搜索:
sort,binary_search,lower_bound
(3) 迭代器(Iterators)
- 五类迭代器:输入/输出、前向/双向/随机访问
- 范围遍历:C++20引入
ranges::简化迭代操作
在本期内容中,我们只需要认识一下输入输出流中iostream的cin,cout,完成一些简单的输入输出操作即可。
二、输入输出——cin / cout
我们先来看这样一段代码:

1.#include < iostream >
C++的输入输出需要包含头文件< iostream > ,并且展开命名空间std(C++标准库),刚才上面的内容中,我们已经介绍了cin/cout是包含在头文件< iostream >中,而< iostream >又包含在命名空间std中,在上期内容的讲解中,我们知道,想要使用命名空间里的内容,就需要展开命名空间或者指定访问命名空间。在这里,由于是平时学习的代码,内容不是很多,所以我们就直接展开命名空间,写起来比较方便,如果不展开命名空间,输入的内容就要就相对多一些,如图所示:
- 使用域作用限定符指定访问命名空间中的内容:

- 使用using将命名空间的cout、endl成员引入:

我们来看下面一段代码:

要注意的是,展开命名空间要写在头文件之后,这是规范的写法,符合顺序逻辑,也就是编译器的解析流程,这里不过多赘述。
2.cout与cin
(1)cout——标准输出流
- 基础输出语法:
cout << "Hello World"; // 输出字符串 cout << 10 << " is the answer"; // 链式输出(拼接不同类型) - 数据类型支持
cout通过运算符重载支持所有内置类型:
int num = 2025;
double pi = 3.1415926;
bool flag = true; cout << num << endl; // 输出:2025
cout << pi << endl; // 输出:3.14159(默认精度6位)
cout << flag << endl; // 输出:1(true为1,false为0)
在这里,我们就不需要像printf那样使用%d,%f,%lf等来输出对应类型的值了,因为cout可以自行判断。当然,如果需要输出小数点后指定多少位,或者一个数字占多少位,这里就不是那么简单了,在这种情况下,还是使用printf输出比较方便,因为C++是兼容C的。
(2)cin——标准输入流
- 头文件:
#include <iostream> - 本质:
cin是std::istream类的全局实例,绑定标准输入设备(通常为键盘) - 缓冲机制:输入内容暂存于内存缓冲区,按需提取至变量
- 基础数据读取
int age;
double salary;
cin >> age >> salary; // 输入"30 85000.5"后,age=30, salary=85000.5
- 自动类型转换:将输入字符序列转换为目标类型数据;
- 空格分隔:默认跳过前导空白,以空格/换行为数据分隔符;
- 链式操作:支持连续提取多个变量。
总而言之,cin就相当于C语言中的scanf。
(3)endl——流操纵器
endl是C++标准库中定义的流操纵器(Manipulator),其行为包含两个不可分割的原子操作:-
- 换行输出:向输出流插入换行符
\n,使后续输出从新行开始;
- 换行输出:向输出流插入换行符
-
- 强制刷新:调用
flush()方法,立即将流缓冲区内容写入目标设备(如控制台、文件、网络套接字)。
- 强制刷新:调用
简单来讲,先将endl理解为'\n'即可。
3. << 流插入与 >> 流提取
流插入运算符<<
- 流插入运算符
<<是C++中输出流操作的核心工具,其本质是ostream类中重载的运算符函数。通过该运算符,数据从内存对象流向输出设备(如控制台、文件、网络套接字)。 - 什么是
控制台?黑框框就是:

流提取运算符>>
- 流提取运算符
>>是C++输入流(istream)的核心操作符,用于从输入源(如键盘、文件、网络)提取数据到变量。其本质是istream类中重载的运算符函数,遵循链式调用规则。
如图所示:
这里>>就是将键盘上输入的10提取出来,赋给变量a。
三、缺省参数
1.缺省参数的概念
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,举个简单的例子:

如图所示,Fun函数中提供了一个缺省参数a=1,也就是说,当我们没有传参的时候,它就会默认调用a=1,输出结果为1;如果传参了,比如这里传了一个10,那么就传什么输出什么。
2.缺省参数的分类
- 全缺省参数
如图所示:

这里在函数定义中,三个参数都是缺省参数,还是这样的原则:没传参就使用缺省参数,如果传参那么就传什么输出什么,并且,这里是有顺序的,Fun(20)就是先把20传给a,b和c使用缺省参数;Fun(20,30)就是先传给a,b,c依然使用缺省参数。 - 半缺省参数
如图所示:

需要注意的是,半缺省参数必须从右往左依次来给出,不能间隔着给,如图:




前一个例子是缺省的两边,中间没有缺省参数;后一个是从左往右安排的缺省参数,这些都是不对的。
本期总结+下期预告
本期内容为大家详细介绍了C++的输入输出和缺省参数,下期内容将为大家带来函数重载和引用相关的知识!
感谢大家的关注,我们下期再见!

相关文章:
C++入门——输入输出、缺省参数
C入门——输入输出、缺省参数 一、C标准库——命名空间 std C标准库std是一个命名空间,全称为"standard",其中包括标准模板库(STL),输入输出系统,文件系统库,智能指针与内存管理&am…...
deepseek 本地部署
deepseek 本地部署 纯新手教学,手把手5分钟带你在本地部署一个私有的deepseek,再也不用受网络影响。流畅使用deepseek!!! 如果不想看文章,指路:Deep seek R1本地部署 小白超详细教程 ࿰…...
[网络爬虫] 动态网页抓取 — Selenium 入门操作
🌟想系统化学习爬虫技术?看看这个:[数据抓取] Python 网络爬虫 - 学习手册-CSDN博客 0x01:WebDriver 类基础属性 & 方法 为模仿用户真实操作浏览器的基本过程,Selenium 的 WebDriver 模块提供了一个 WebDriver 类…...
HTML 超链接(简单易懂较详细)
在 HTML 中,超链接是通过 <a> 标签(anchor tag)创建的。超链接允许用户通过点击文本、图像或其他元素跳转到另一个网页、文件或页面的特定部分。本文将详细介绍 HTML 超链接的语法、属性和应用场景。 一、基本语法 <a href"U…...
rpc和proto
rpc全称远程过程控制,说白了是一种对信息发送和接收的规则编写方法,来自google,这些规则会以protobuf代码存到proto文件里。我以autoGen中agent_worker.proto为例,大概长这样 syntax "proto3";package agents;option …...
OPENGLPG第九版学习 -颜色、像素和片元 PART1
文章目录 4.1 基本颜色理论4.2 缓存及其用途颜色缓存深度缓存 / z缓存 / z-buffer模板缓存 4.2.1 缓存的清除4.2.2 缓存的掩码 4.3 颜色与OpenGL4.3.1 颜色的表达与OpenGL4.3.2 平滑数据插值 4.4 片元的测试与操作4.4.1 剪切测试4.4.2 多重采样的片元操作4.4.3 模板测试模板查询…...
【js逆向】某精灵网
地址:aHR0cHM6Ly93d3cuamluZ2xpbmdzaHVqdS5jb20vYXJ0aWNsZXM f12查看数据包,下面这个不是,你得到的是你的用户信息,需要点击第2页才会显示数据接口 查看载荷 查看预览数据,发现是加密的 查看启动器,看到 Pr…...
自然语言处理:高斯混合模型
介绍 大家好,博主又来给大家分享知识了,今天给大家分享的内容是自然语言处理中的高斯混合模型。 在自然语言处理这个充满挑战与机遇的领域,我们常常面临海量且复杂的文本数据。如何从这些数据中挖掘出有价值的信息,对文本进行有…...
RISC-V汇编学习(三)—— RV指令集
有了前两节对于RISC-V汇编、寄存器、汇编语法等的认识,本节开始介绍RISC-V指令集和伪指令。 前面说了RISC-V的模块化特点,是以RV32I为作为ISA的核心模块,其他都是要基于此为基础,可以这样认为:RISC-V ISA 基本整数指…...
OpenCV连续数字识别—可运行验证
前言 文章开始,瞎说一点其他的东西,真的是很离谱,找了至少两三个小时,就一个简单的需求: 1、利用OpenCV 在Windows进行抓图 2、利用OpenCV 进行连续数字的检测。 3、使用C,Qt 3、将检测的结果显示出来 …...
Python中与字符串操作相关的30个常用函数及其示例
以下是Python中与字符串操作相关的30个常用函数及其示例: 1. str.capitalize() 将字符串的第一个字符大写,其余字符小写。 s "hello world" print(s.capitalize()) # 输出: Hello world2. str.lower() 将字符串中的所有字符转换为小写。…...
007-Property在C++中的实现与应用
Property在C中的实现与应用 以下是在C中实现属性(Property)的完整实现方案,结合模板技术和运算符重载实现类型安全的属性访问,支持独立模块化封装: #include <iostream> #include <functional>template<typename HostType, t…...
【实战篇】【DeepSeek 全攻略:从入门到进阶,再到高级应用】
凌晨三点,某程序员在Stack Overflow上发出灵魂拷问:“为什么我的DeepSeek会把财务报表生成成修仙小说?” 这个魔性的AI工具,今天我们就来场从开机键到改造人类文明的硬核教学。(文末含高危操作集锦,未成年人请在师父陪同下观看) 一、萌新村任务:把你的电脑变成炼丹炉 …...
clickhouse属于国产吗
《ClickHouse:探索其背景与国内的应用实例》 当我们谈论数据库技术时,ClickHouse是一个绕不开的话题。很多人可能会好奇,ClickHouse是否属于国产软件呢?答案是,虽然ClickHouse最初并非在中国开发,但这款列…...
ESP32 UART select解析json数据,上位机控制LED灯实验
前言: 本实验的目的主要是通过上位机通过UART来控制ESP32端的LED的点亮以及熄灭,整个项目逻辑比较简单,整体架构如下: 上位机(PC)主要是跑在PC端的一个软件,主要作用包含: 1)串口相关配置&…...
K8S 集群搭建——cri-dockerd版
目录 一、工作准备 1.配置主机名 2.配置hosts解析 3.配置免密登录(只需要在master上操作) 4.时间同步(每台节点都要做,必做,否则可能会因为时间不同步导致集群初始化失败) 5.关闭系统防火墙 6.配置…...
基于Python的电商销售数据分析与可视化系统实
一、系统架构设计 1.1系统流程图 #mermaid-svg-Pdo9oZWrVHNuOoTT {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Pdo9oZWrVHNuOoTT .error-icon{fill:#552222;}#mermaid-svg-Pdo9oZWrVHNuOoTT .error-text{fill:#5…...
学习笔记:Python网络编程初探之基本概念(一)
一、网络目的 让你设备上的数据和其他设备上进行共享,使用网络能够把多方链接在一起,然后可以进行数据传递。 网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。 二、IP地址的作用 用来标记唯一一台电脑…...
高效处理 List<T> 集合:更新、查找与优化技巧
引言 在日常开发中,List<T> 是我们最常用的数据结构之一。无论是批量更新数据、查找特定项还是进行复杂的集合操作,掌握 List<T> 的高级用法可以显著提高代码的效率和可读性。本文将详细介绍如何使用 List<T> 进行批量更新、查找匹配项以及优化性能的方法…...
HTML5(Web前端开发笔记第一期)
p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解 目录 三件套标签标题标签段落标签文本格式化标签图像标签超链接标签锚点链接默认链接地址 音频标签视频标签 HTML基本骨架综合案例->个人简介列表表格表单input标签单选框radio上传…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
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. 查看链接器参数(如果没有勾选上面…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
