当前位置: 首页 > news >正文

【C++】标准库IO查漏补缺

【C++】标准库 IO 查漏补缺

文章目录

    • 系统I/O
      • 1. 概述
      • 2. cout 与 cerr
      • 3. cerr 和 clog
      • 4. 缓冲区
      • 5. 与 printf 的比较

系统I/O

1. 概述

标准库提供的 IO 接口,包含在 iostream 文件中

  • 输入流: cin
  • 输出流:cout / cerr / clog。

输入流只有一个 cin,而输出流有三个 cout / cerr / clog,这些输出流有什么区别呢?

输出流的主要区别有两个

  1. 输出目标不同
  2. 是否刷新缓冲区

2. cout 与 cerr

首先 cout 和 cerr 的输出目标不同,若程序重定向到文件,则会分别输出在不同的文件里。

编写如下程序:

#include <iostream>
using namespace std;
int main()
{cout << "output to cout" << endl;cerr << "output to cerr" << endl;return 0;
}

执行

./testio > txt1 2> txt2

在这里插入图片描述

3. cerr 和 clog

cerr 和 clog 区别是否立即刷新缓冲区,两者都是同一个输出目标

#include <iostream>
using namespace std;
int main()
{cout << "output to cout" << endl;cerr << "output to cerr" << endl;clog << "output to clog" << endl;return 0;
}

再次执行

./testio > txt1 2> txt2

可以看到 cerr和clog在同一个文件中

4. 缓冲区

缓冲区是内存的一部分,输出的东西先存入缓冲区,缓冲区满了再输出,程序操作内存速度要快一些,从而达到比较高的执行效率。

cerr 会立即刷新缓冲区,从而在程序错误异常崩溃时,能够及时看到错误。

std::flush 或者 std::endl 用于在执行到此行语句时,立即刷新缓冲区。
因此过度的使用这两个会拖慢进程,所以仅在必要时使用 std::flush 或 std::endl 来立即刷新缓冲区。

关于 std 这是一个命名空间 standard ,C++ 标准库

5. 与 printf 的比较

printf 比较直观,一目了然,cout 有很多 << 而且拼字符串有可能拼错

int x = 10;
std::cout << "I have " << x << " apples\n";
printf("I have %d apples\n", x);

但 printf 容易出错,cout 不容易出错

float x = 10;
std::cout << "I have " << x << " apples";
printf("I have %d apples\n", x);

此处占位符出错便无法进行正确的输出,占位符必须匹配正确

C++20 格式化

auto s1 {format("read {} bytes from {}", 100, "file.txt")};

目前编译器都不是支持的特别好。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CORS漏洞及其防御措施:保护Web应用免受攻击
  • 看Threejs好玩示例,学习创新与技术(三)
  • `character_set_server` 和 `collation_server`
  • Nuxt Kit 组件管理:注册与自动导入
  • 一. Unity实现虚拟摇杆及屏幕自适应功能
  • GPS/LBS/Wi-Fi定位,全安排!—合宙Air201资产定位模组LuatOS快速入门04
  • Rust Web开发框架对比:Warp与Actix-web
  • 升级Ubuntu内核的几种方法
  • Table列表复现框实现【勾选-搜索-再勾选】
  • Python | Leetcode Python题解之第406题根据身高重建队列
  • C语言补习课番外篇——采样sin(x)
  • CustomerbasicController
  • 如何 吧一个 一维数组 切分成相同等分,一维数组作为lstm的输入(三维数据)的数据预处理 collate_fn的应用
  • c语言快递小项目
  • 深度学习速通系列:F1和F2分数
  • C++类中的特殊成员函数
  • echarts的各种常用效果展示
  • iOS 颜色设置看我就够了
  • js中forEach回调同异步问题
  • node学习系列之简单文件上传
  • overflow: hidden IE7无效
  • python3 使用 asyncio 代替线程
  • Shell编程
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 聊聊redis的数据结构的应用
  • 优化 Vue 项目编译文件大小
  • 容器镜像
  • #VERDI# 关于如何查看FSM状态机的方法
  • #控制台大学课堂点名问题_课堂随机点名
  • %check_box% in rails :coditions={:has_many , :through}
  • (02)Hive SQL编译成MapReduce任务的过程
  • (13)DroneCAN 适配器节点(一)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (175)FPGA门控时钟技术
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (23)Linux的软硬连接
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (SERIES12)DM性能优化
  • (void) (_x == _y)的作用
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (三)docker:Dockerfile构建容器运行jar包
  • (算法)Travel Information Center
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)memcache、redis缓存
  • (转)一些感悟
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET 8.0 中有哪些新的变化?
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET运行机制
  • .sdf和.msp文件读取