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

C++中的std::cout与std::cerr、std::clog

   本文用于记录C++中std::cout与std::cerr、std::clog的异同

   std::cerr 是C++标准库中的标准错误输出流,用于向标准错误设备输出信息,通常用于报告程序的错误和异常情况。与之相对的,std::cout 是标准输出流,用于向标准输出设备输出一般的程序输出。std::clog 是一个用于输出程序日志信息的有用工具,通常在日常程序开发和调试中使用,以记录程序的运行状态和事件。

   一、 std::cerrstd::cout 的主要方面对比:

   1. 输出设备:

   - std::cerr 输出到标准错误设备,通常是控制台或终端。

   - std::cout 输出到标准输出设备,通常也是控制台或终端。

   2. 缓冲:

   - std::cerr 通常是非缓冲的,即它的输出会立即显示在终端上,无需等待缓冲区填满。

   - std::cout 通常是缓冲的,即输出被收集在缓冲区中,然后在换行或程序结束时一次性刷新到终端。

   3. 用途:

   - std::cerr 用于输出错误消息、异常信息和其他临时或紧急情况的诊断信息,通常用于不会对正常程序流程产生影响的信息输出。

   - std::cout 用于一般的程序输出,例如用户界面、数据报告、日志等。


   二、 输出错误消息时,与 std::cout 相比,std::cerr 的优势

   通过第一部分的介绍,我们可以知道在C++程序中用于输出错误消息时,通常推荐使用 std::cerr 而不是 std::cout,输出报错信息时std::cerr` 的主要优势如下:

   1. 非缓冲输出

   std::cerr 是非缓冲的,这意味着 输出消息会立即显示在终端上,而不会等待缓冲区刷新 。这在错误和异常处理中很重要,因为它确保错误消息尽快显示,而不会被延迟,从而帮助程序员更快地定位和解决问题。

   2. 区分标准输出

   使用 std::cerr 使错误消息从标准输出消息(使用 std::cout 输出的消息)明显区分开来。这有助于用户或开发人员在程序运行时识别和定位问题。

   3. 标准错误设备

   std::cerr 默认输出到标准错误设备,通常是终端或控制台。这是一个专门用于报告错误和异常的设备,不会影响标准输出。

   4. 不受缓冲影响

   由于 std::cerr 不受输出缓冲的影响,即使程序崩溃或异常终止,错误消息也可以正常显示,这有助于诊断问题。


   三、 std::cerr与std::cout的使用示例

   在下面的程序中,我们定义了一个名为cout_two_VectorXd的函数,用于按行输出两列Eigen::VectorXd类型的数据,这就要求提供的两个VectorXd类型的参数中存储的数据个数应该相同,否则在输出时会报错

   因此,在输出前,对两个参数的大小是否相同进行了判断,若不同,则使用std::cerr给出报错信息,并返回,若相同,则使用std::cout`输出数据

#include <iostream>
#include <Eigen/Eigen>//按行两列Eigen::VectorXd类型的数据
void cout_two_VectorXd(const Eigen::VectorXd& data1, const Eigen::VectorXd& data2)
{if (data1.size() != data2.size()) {std::cerr << "Error: Data sizes do not match." << std::endl;return;}for (int i = 0; i < data1.size(); i++) {std::cout << data1[i] << "   " << data2[i] << std::endl;}  
}int main() {Eigen::VectorXd x(3); // 创建一个长度为3的向量xx << 1.0, 2.0, 3.0;  // 为 x 赋初值Eigen::VectorXd y(3); // 创建一个长度为3的向量yy << 4.0, 5.0, 6.0;  // 为 y 赋初值Eigen::VectorXd z(4); // 创建一个长度为4的向量zz << 7.0, 8.0, 9.0, 10;  // 为 z 赋初值cout_two_VectorXd(x, y);cout_two_VectorXd(x, z);return 0;
}

   上述程序的运行结果如下:

1   4
2   5
3   6
Error: Data sizes do not match.

   总之,std::cerr 是专门用于输出错误和异常消息的工具,它提供了一些特性,使其在这些情况下更可靠和有用。虽然 std::cout 也可以用于输出错误消息,但它通常是缓冲的,可能会导致消息延迟显示,而且与一般输出混在一起,不容易识别。因此,推荐在错误和异常处理中使用 std::cerr


   四、补充记录:std::clog

   std::clog是c++中的标准日志输出流,类似于 std::cerr,用于输出程序日志和诊断信息,但与 std::cerr 不同,它通常是缓冲的。

   详情如下:

   std::clog 是C++标准库中的标准日志输出流,用于将程序的日志信息发送到标准错误设备(通常是终端或控制台)。它类似于 std::cerr,但与 std::cerr 不同,std::clog 通常是缓冲的,这意味着输出消息被收集在缓冲区中,然后在换行或程序结束时才一次性刷新到终端。

   std::clog 通常用于输出程序的日志信息、诊断信息以及其他不属于错误和异常的消息。它是一个合适的工具,用于跟踪程序的运行、记录事件、调试代码等。

   std::cerr 一样,std::clog 输出到标准错误设备,通常是终端或控制台。这意味着日志消息会与程序的错误和异常信息分开显示,以帮助用户或开发人员识别和处理问题。

   示例用法:

#include <iostream>int main() {// 输出日志消息到 std::clogstd::clog << "This is a log message." << std::endl;return 0;
}

   总之,std::clog 是一个用于输出程序日志信息的有用工具,通常在日常程序开发和调试中使用,以记录程序的运行状态和事件。它提供了一种与标准输出 std::cout 和标准错误输出 std::cerr 相比更适合输出日志信息的方式。


相关文章:

C++中的std::cout与std::cerr、std::clog

本文用于记录C中std::cout与std::cerr、std::clog的异同 std::cerr 是C标准库中的标准错误输出流&#xff0c;用于向标准错误设备输出信息&#xff0c;通常用于报告程序的错误和异常情况。与之相对的&#xff0c;std::cout 是标准输出流&#xff0c;用于向标准输出设备输出一般…...

No authorization token was found

今天遇到了一个问题&#xff0c;我把前后端逻辑都理了一遍&#xff0c;开始怀疑后端&#xff0c;后端肯定没错了&#xff0c;把前端理了一遍&#xff0c;ok前后端没错&#xff0c;我错。登录哪里需要的token&#xff1f;&#xff1f;&#xff1f;&#xff1f;把我搞懵逼了。 测…...

Kubernetes概述及其组件/核心组件

目录 1、K8S 是什么&#xff1f; 2、为什么要用 K8S? 3、k8s的特性 4、Kubernetes 集群架构与组件 5、核心组件 Master 组件 ●Kube-apiserver ●Kube-controller-manager ●Kube-scheduler 配置存储中心 ●etcd Node 组件 ●Kubelet ●Kube-Proxy ●docker 或…...

毫米波雷达实时采集教

https://www.cnblogs.com/dhyc/p/10510876.html 毫米波雷达实时采集教程---- 以及好网站总结&#xff1a;资料分享——RSP1 多普勒雷达开发套件...

Java进阶(HashMap)——面试时HashMap常见问题解读 结合源码分析

前言 List、Set、HashMap作为Java中常用的集合&#xff0c;需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中HashMap集合的面试问题&#xff0c;结合源码分析题目背后的知识点。 关于List的博客文章如下&#xff1a; Java进阶&#xff08;List&#xff09;——面试…...

Kotlin 使用@BindingAdapter编译出错

在 Kotlin 中使用 BindingAdapter 注解时&#xff0c;需要确保你的项目正确配置了 Data Binding。 首先&#xff0c;请确保在项目的 build.gradle 文件中启用了 Data Binding&#xff1a; android {// ...dataBinding {enabled true} }接下来&#xff0c;请确保你在正确的地…...

Qt之信号和槽,connect参数分析

connect()方法 Qt进行信号和槽连接&#xff0c;有以下几种方法&#xff1a; static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType Qt::AutoConnection); static QMetaObj…...

Python学习笔记—元组

1、元组定义 元组使用&#xff08;&#xff09;来定义&#xff0c;元素在&#xff08;&#xff09;括号内&#xff0c;用逗号隔开 空元组定义&#xff0c;元组名&#xff08;&#xff09; 注&#xff1a;当元组只有1个元素的时候&#xff0c;需要在元素后面加逗号&#xff0c;…...

【C++项目】高并发内存池第五讲内存回收释放过程介绍

内存回收 1.ThreadCache2.CentralCache3.PageCache 项目源代码&#xff1a;高并发内存池 1.ThreadCache void ThreadCache::Deallocate(void* ptr, size_t size) {assert(ptr);assert(size < MAX_BYTES);//计算在哪号桶中&#xff0c;然后插入进去size_t index SizeClass…...

[毕设记录]@学术工具体验:Sread.ai

我是在查RAG相关的时候&#xff0c;在知乎上面看到了这篇回答&#xff1a;浅谈生成式 AI 技术&#xff1a;检索增强生成 RAG - MarvinZ的文章 - 知乎 https://zhuanlan.zhihu.com/p/659248219 然后在末尾看到了这个 sread.ai 在作者主页看到了他关于这个产品的介绍&#xff1a…...

uboot - 驱动开发 - 驱动模型

说明 类似于linux&#xff0c;为了规范、统一驱动适配和驱动接口调用&#xff0c;uboot定义了一套驱动模型(Driver Model)&#xff0c;简称DM。本文基于&#xff1a;u-boot-2021.10。 优点 为同一类ip的驱动定义了统一的操作接口&#xff0c;DM在软件层面做了一定的抽象。分…...

windows 操作系统命令积累

1. 按 "prt sc" 键 截屏 2. 按 "fn" 键让浏览器进入全屏模式&#xff0c;再次按 "fn" 键让浏览器退出全屏模式( ps&#xff1a;惠普笔记本上是 "fn" "f11" ) 3. ipconfig 查看ip信息 4. 查看指定端口被什么进程占用...

数据结构单链表的实现(C语言)

目录 1.实现的接口和功能2.代码块 1.实现的接口和功能 //打印链表 void SLTPrint(SLTNode** phead); //头插 void PushFont(SLTNode** phead, SLTDataType x); //尾插 void PushBack(SLTNode** phead, SLTDataType x); //头删 void PopFont(SLTNode** phead); //尾删 void Pop…...

Postman的高级使用,傻瓜式学习【下】

目录 前言 1、全局变量、环境变量 1.1、概念&#xff1a; 1.2、如何设置全局变量、环境变量 1.3、获取全局变量、环境变量 1.4、案例1&#xff1a;手动设置变量&#xff0c;请求参数获取 1.5、案例2&#xff1a;代码设置变量&#xff0c;代码获取变量 2、Postman读取外部…...

Qt:关闭对话框,动画实现窗体逐渐缩小到消失

关键技术&#xff1a; 1、使用QPropertyAnimation对象&#xff0c;实现动画效果&#xff0c;逐渐缩小窗体尺寸&#xff0c;以及透明度&#xff1b; 2、在对话框缩小时&#xff0c;要将界面中的控件都隐藏起来&#xff0c;并且将对话框布局的Margin修改成0 代码如下&#xff…...

在Windows上 ciphey安装(详细版)

文章目录 前言 一、不想卸载原有的python版本&#xff1f; 二、安装步骤 1.安装python 2.创建虚拟环境vnev 3.在ciphey的虚拟环境中进行激活 4.安装ciphey 三、参数列表 总结 前言 提示&#xff1a;安装了好几次&#xff0c;但是都没安装成功&#xff0c;我使用了三个电脑p…...

【lesson2】数据库的库操作

文章目录 库操作创建数据库删除数据库字符集和校验规则手动设置字符集和校验集不同字符集和校验集之间的区别修改数据库字符集和校验集备份和恢复数据库 库操作 创建数据库 删除数据库 字符集和校验规则 创建数据库的时候&#xff0c;有两个编码集&#xff1a; 1.数据库编码集…...

Android Studio Giraffe解决gradle reload failed问题

settings.gradle.kts中 pluginManagement {repositories {google()mavenCentral()gradlePluginPortal()} } dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()} } 各增加三行内容&#x…...

刷题笔记day06-哈希表

242.有效的字母异位词 // 思路2&#xff1a;排序后在比较是否相等import ("sort""fmt""io""strings""os" )func isAnagram(s string, t string) bool {s1, s2 : []byte(s), []byte(t)// 从小到大排序sort.Slice(s1, func(i…...

springboot项目中如何实现过滤器鉴权

通常来说鉴权都是写在网关当中&#xff0c;对于单体应用也可以在后台服务中通过一个过滤器实现。其实过程与网关当中的没什么不同&#xff0c;只是在gateway当中目前是基于netty响应式的。过程如下&#xff1a; 一、实现Filter接口 定义自己的过滤器&#xff0c;并且实现Filt…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...