无锡网站建设运营/广东深圳疫情最新消息
本文用于记录C++中std::cout与std::cerr、std::clog的异同
std::cerr
是C++标准库中的标准错误输出流,用于向标准错误设备输出信息,通常用于报告程序的错误和异常情况。与之相对的,std::cout
是标准输出流,用于向标准输出设备输出一般的程序输出。std::clog
是一个用于输出程序日志信息的有用工具,通常在日常程序开发和调试中使用,以记录程序的运行状态和事件。

一、 std::cerr
和 std::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标准库中的标准错误输出流,用于向标准错误设备输出信息,通常用于报告程序的错误和异常情况。与之相对的,std::cout 是标准输出流,用于向标准输出设备输出一般…...

No authorization token was found
今天遇到了一个问题,我把前后端逻辑都理了一遍,开始怀疑后端,后端肯定没错了,把前端理了一遍,ok前后端没错,我错。登录哪里需要的token????把我搞懵逼了。 测…...

Kubernetes概述及其组件/核心组件
目录 1、K8S 是什么? 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 毫米波雷达实时采集教程---- 以及好网站总结:资料分享——RSP1 多普勒雷达开发套件...

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

Kotlin 使用@BindingAdapter编译出错
在 Kotlin 中使用 BindingAdapter 注解时,需要确保你的项目正确配置了 Data Binding。 首先,请确保在项目的 build.gradle 文件中启用了 Data Binding: android {// ...dataBinding {enabled true} }接下来,请确保你在正确的地…...

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

Python学习笔记—元组
1、元组定义 元组使用()来定义,元素在()括号内,用逗号隔开 空元组定义,元组名() 注:当元组只有1个元素的时候,需要在元素后面加逗号,…...

【C++项目】高并发内存池第五讲内存回收释放过程介绍
内存回收 1.ThreadCache2.CentralCache3.PageCache 项目源代码:高并发内存池 1.ThreadCache void ThreadCache::Deallocate(void* ptr, size_t size) {assert(ptr);assert(size < MAX_BYTES);//计算在哪号桶中,然后插入进去size_t index SizeClass…...

[毕设记录]@学术工具体验:Sread.ai
我是在查RAG相关的时候,在知乎上面看到了这篇回答:浅谈生成式 AI 技术:检索增强生成 RAG - MarvinZ的文章 - 知乎 https://zhuanlan.zhihu.com/p/659248219 然后在末尾看到了这个 sread.ai 在作者主页看到了他关于这个产品的介绍:…...

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

windows 操作系统命令积累
1. 按 "prt sc" 键 截屏 2. 按 "fn" 键让浏览器进入全屏模式,再次按 "fn" 键让浏览器退出全屏模式( ps:惠普笔记本上是 "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、概念: 1.2、如何设置全局变量、环境变量 1.3、获取全局变量、环境变量 1.4、案例1:手动设置变量,请求参数获取 1.5、案例2:代码设置变量,代码获取变量 2、Postman读取外部…...

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

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

【lesson2】数据库的库操作
文章目录 库操作创建数据库删除数据库字符集和校验规则手动设置字符集和校验集不同字符集和校验集之间的区别修改数据库字符集和校验集备份和恢复数据库 库操作 创建数据库 删除数据库 字符集和校验规则 创建数据库的时候,有两个编码集: 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:排序后在比较是否相等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项目中如何实现过滤器鉴权
通常来说鉴权都是写在网关当中,对于单体应用也可以在后台服务中通过一个过滤器实现。其实过程与网关当中的没什么不同,只是在gateway当中目前是基于netty响应式的。过程如下: 一、实现Filter接口 定义自己的过滤器,并且实现Filt…...

【rust/esp32】在idf中使用embedded-graphics控制st7789 LCD屏幕
文章目录 说在前面模块详情准备工作开始编译烧录结果 说在前面 esp32版本:s3运行环境:esp-idf(std)开发环境:wsl2LCD模块:ST7789V2 240*280 LCDgithub地址:这里 模块详情 某宙的esp32s3开发板 某雪的1.69inch LCD模块…...

YOLOv8如何添加注意力模块?
分为两种:有参注意力和无参注意力。 eg: 有参: import torch from torch import nnclass EMA(nn.Module):def __init__(self, channels, factor8):super(EMA, self).__init__()self.groups factorassert channels // self.groups > 0self.softmax …...

用LibreOffice在excel中画折线图
数据表格如下。假设想以x列为横坐标,y1和y2列分别为纵坐标画折线图。 选择插入-》图表: 选择折线图-》点和线,然后点击“下一步”: 选择:列中包含数据序列,然后点击完成(因为图挡住了数据…...

RabbitMQ 链接管理-发布者-消费者
RabbitMQ连接管理器 using RabbitMQ.Client; using System; public class RabbitMQConnectionManager { private readonly IConnectionFactory _connectionFactory; private IConnection _connection; public RabbitMQConnectionManager(string hostName) { …...

JAVA中的垃圾回收器(3)----ZGC
一)ZGC介绍:是JAVA11新引入的低延迟垃圾收集器 ZGC是一款基于Regin的,暂时没有分代概念的,使用了读屏障,颜色指针等技术来实现并发的标记清除和标记整理算法,一低延迟为主要目标的一款垃圾回收器 ZGC的regin可以分为是下图中具有大…...

IDEA 如何运行 SpringBoot 项目
步骤一:配置 Maven 第一步:用 IDEA 打开项目,准备配置 maven 环境 ,当然如果本地没有提前配置好 maven,就用 IDEA 默认的配置即可 配置 maven 步骤 情况 1:如果本地没有配置过 maven,可以保持如…...

Linux MeterSphere测试平台远程访问你不会?来试试这篇文章
🎬 鸽芷咕:个人主页 🔥 个人专栏:《粉丝福利》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网…...

15.k8s集群防火墙配置
防火墙配置 ######################## # master节点防火墙设置 ######################### 所有master节点开放相关防火墙端口 $ firewall-cmd --zonepublic --add-port6443/tcp --permanent $ firewall-cmd --zonepublic --add-port2379-2380/tcp --permanent $ firewall-cmd…...

Python beautifulsoup网络抓取和解析cnblog首页帖子数据
视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 我们抓取下https://www.cnblogs.com/ 首页所有的帖子信息,包括帖子标题,帖子地址,以及帖子作者信息。 首先用requests获取网页文件࿰…...

Java集成腾讯云OCR身份证识别接口
一、背景 项目用到身份证识别获取人员信息的功能,于是想到了腾讯云提供这样的API。在整合代码过程都很顺利,利用腾讯云官方SDK很快集成进来。但是在上测试环境部署时有了新的问题,通过Nginx代理后的环境无法访问到目标腾讯云接口,…...