当前位置: 首页 > 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")};

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

http://www.lryc.cn/news/438557.html

相关文章:

  • python简单易懂的lxml读取HTML节点及常用操作方法
  • Java | Leetcode Java题解之第406题根据身高重建队列
  • 安卓获取apk的公钥,用于申请app备案等
  • 【leetcode_python】杨辉三角
  • Parallels Desktop 20 for Mac中文版发布了?会哪些新功能
  • SpringBoot整合SSE-灵活管控连接
  • 挖矿木马-Linux
  • 【leetcode——415场周赛】——python前两题
  • 【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)
  • ZYNQ LWIP(RAW API) TCP函数学习
  • Spring Boot,在应用程序启动后执行某些 SQL 语句
  • 【SQL】百题计划:SQL最基本的判断和查询。
  • 04_Python数据类型_列表
  • F5设备绑定EIP
  • 使用 PyCharm 新建 Python 项目详解
  • 从0开始学习 RocketMQ:分布式事务消息的实现
  • MySQL 查询数据库的数据总量
  • [C++]——vector
  • 自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)
  • 随想录笔记-二叉树练习题
  • 华雁智科前端面试题
  • 【iOS】单例模式
  • Linux | 探索 Linux 信号机制:信号的产生和自定义捕捉
  • 递归的时间复杂度分析
  • C++: 二叉树进阶面试题
  • 【HarmonyOS NEXT】实现网络图片保存到手机相册
  • Pytorch详解-数据模块
  • 浅谈openresty
  • 【学习笔记】2024最新版SpringCloud教程
  • Proxyless Service Mesh:下一代微服务架构体系