C++服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号

news2024/12/25 9:18:34

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。
其教学视频见:[C++高级教程]从零开始开发服务器框架(sylar)

上一篇:C++服务器框架开发4——日志系统logger/.cpp与.cc

C++服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号

  • 目前进度
  • IO类(3种stream)
    • iostream:控制台输入输出。
    • stringstream:string的输入输出
    • fstream:文件相关的输入输出
  • 双感叹号

目前进度

目前学习到第三个视频,视频up对log.h中的logAppender的两个子类进行了定义。
要点:

  1. log.h中的LogAppend类,声明了1个m_formatter成员(因为可能数据格式会有多种,所以定义了这个成员)、1个设置m_formatter的函数setFormatter、1个获得m_formatter的函数getFormatter。

在这里插入图片描述

  1. 导入了两个头文件。
    :这里的#include <stringstream>应该是写错了,应该是#include <sstream>
    在这里插入图片描述

  2. log.h中的输出到控制台的Appender:stdoutLogAppender与输出到文件的Appender:FileLogAppender。其中,后者有成员变量,分别是文件名m_filename、和文件流m_filestream。还有一个reopen函数。
    在这里插入图片描述

  3. log.cc中对几个函数做了定义。其中,从reopen函数的定义可以看到,如果文件被打开了,则先关闭,然后再打开。这个的返回值有双感叹号,下一小节会介绍是什么意思。

在这里插入图片描述

IO类(3种stream)

参考自文章1和文章2

iostream:控制台输入输出。

#ifndef __HELLOWORLD__
#define __HELLOWORLD__
#include <iostream>
#endif 


int main() {
	int a;
	std::cin >> a;//从控制台接收输入并保存在a中
	std::cout << a;//把a的值输出到控制台                                   //sp不再持有任何指针(空指针)

	return 0;
}

输入了1,返回来1
在这里插入图片描述

stringstream:string的输入输出

#ifndef __HELLOWORLD__
#define __HELLOWORLD__
#include<iostream>
#include<sstream>//上面图片2中up写错了,应该导入sstream而不是stringstream
#include<string>
#endif 


int main() {
	std::string b="6789";
	std::istringstream a(b); //将a和string类型的b相关联
	std::string c;
	while (a >> c) //a从b中读取东西并保存在c中(从a往c“扔”东西)
		std::cout<<a.str(); //调用str()函数将a的内容输出看看

	std::ostringstream d;
	d << "abcdefg"; //将字符串保存到d中(“扔”到d里面)
	std::cout << d.str(); //调用str()函数将d的内容输出看看

	return 0;
}

在这里插入图片描述

fstream:文件相关的输入输出

#ifndef __HELLOWORLD__
#define __HELLOWORLD__
#include<iostream>
#include<fstream>
#include<string>
#endif 


int main() {
		// writing on a text file
		std::ofstream out("out.txt");
		std::cout << !!out << std::endl;
		if (out.is_open())
		{
			out << "This is a line.\n";
			out << "This is another line.\n";
			out.close();
			std::cout << "Finished writing" << std::endl;
		}

		// reading a text file
		char buffer[256];
		std::ifstream in("test.txt");
		std::cout << !!in << std::endl;
		if (!in.is_open())
		{
			std::cout << "Error opening file"; exit(1);
		}
		while (!in.eof())
		{
			in.getline(buffer, 100);
			std::cout << buffer << std::endl;
		}

	return 0;
}

在这里插入图片描述

在这里插入图片描述

双感叹号

日志系统中的reopen函数最后将ofstream流加了双感叹号作为返回值,我在上面关于fstream的代码中直接将他输出到控制台,可以看到,正常打开的话,会输出1。

双感叹是为了将变量值转换为逻辑值,因为非零是true,零为false,所以用双感叹号就可以实现这一点。单感叹号和双感叹号的效果如下:

#ifndef __HELLOWORLD__
#define __HELLOWORLD__
#include<iostream>


#endif 


int main() {
		//取反
		std::cout << !(0) << std::endl;
		std::cout << !(1) << std::endl;
		//非零为1,零为0
		std::cout << !!(0) << std::endl;
		std::cout << !!(2) << std::endl;

	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022年天府杯全国大学生数学建模竞赛C题环境保护与绿色经济解题全过程文档及程序

2022年天府杯全国大学生数学建模竞赛 C题 环境保护与绿色经济 原题再现&#xff1a; “节能减排”和发展绿色经济是国家一项重大战略规划。“绿水青山就是金山银山”。环境的保护对国民经济的发展有着重要意义。随着工业化进程的加快&#xff0c;环境保护方面的问题已经刻不容…

ClickHouse进阶|如何自研一款企业级高性能网关组件?

使用原生ClickHouse集群进行节点数据查询和写入时&#xff0c;离不开第三方开源网关组件chproxy支持。但由于chproxy缺少TCP协议支持&#xff0c;导致性能、查询能力等受限。这也成为困扰众多ClickHouse开发者的一大难题。那么&#xff0c;究竟应该如何突破&#xff1f;本文将揭…

chatgpt赋能python:Python中撤销的快捷键

Python中撤销的快捷键 在编程中&#xff0c;我们经常需要进行调试&#xff0c;不可避免地会出现一些错误&#xff0c;这时候撤销 (Undo) 功能就显得尤为重要。在 Python 中&#xff0c;我们可以使用一些快捷键来快速撤销&#xff0c;本文将会介绍这些快捷键的使用以及使用它们…

chatgpt赋能python:Python中的字符提取:从基础到高级

Python中的字符提取&#xff1a;从基础到高级 在使用Python进行文本处理和数据挖掘时&#xff0c;我们经常需要从字符串中提取特定的字符或子串。本文将介绍Python中的常用字符串提取方法&#xff0c;包括基础的字符串操作、正则表达式和第三方库等高级方法。 基础字符串操作…

二叉树中堆的实现

完全二叉树 满二叉树&#xff1a;二叉树每个节点的度都达到最大值&#xff08;2&#xff09;&#xff0c;由此可有等比求和计算出节点总数&#xff1a;2^k-1 完全二叉树&#xff1a;除了最后一层。前面节点的度都满了&#xff0c;最后一层可以不满&#xff0c;但是必须从左至右…

用时序数据库 DolphinDB 实现地震波形的分析预警

1. 绪论 波形数据的存储与实时流处理是地震预警、地震速报、地震烈度速报、震源机制解等数字地震台网综合处理系统的前提&#xff0c;合理的存储方案与高效的实时流处理架构能极大地节约存储成本、降低响应延时、方便震源分析。 本篇教程会为有该方面需求的客户提供一个基于 …

如何在不丢失格式的情况下将 Excel 转换为 PDF?

Microsoft Excel 因其专业的数据或信息显示能力而被广泛采用。但是&#xff0c;它在兼容性上有一个恼人的缺点。 首先&#xff0c;Excel只能在Windows和MacOS上使用&#xff0c;Linux或其他操作系统的用户将无法使用&#xff1b;其次&#xff0c;即使您有一个可以打开和阅读 E…

PERMA幸福模型

PERMA幸福模型 由“积极心理学之父”马丁塞利格曼&#xff08;Martin Seligman&#xff09;在《持续的幸福 》一书中提出。 模型介绍 PERMA指的是创造充实、快乐和有意义的生活所必需的五大要素&#xff0c;它们是: 正向情绪Positive emotions 积极情绪是快乐人生的一个重要…

三种不同的存储芯片性能比较

为了进行性能比较&#xff0c;使用了三种不同的存储芯片&#xff0c;即Everspin EM064LX 64Mib STT‐MRAM、Micron MT25Q 128Mib NOR闪存和Micron MT29F 1Gib SLC NAND闪存。 该基准测试在STM32H755ZI上运行&#xff0c;Cortex‐M7内核的时钟频率为240MHz。Quad SPI总线用于1‐…

安泰功率放大器ATA-8202在EMC电磁兼容测试中的具体应用

作为电子及电器产品质量衡量指标之一的电磁兼容性&#xff08;EMC&#xff09;测试&#xff0c;它的测试正确与否直接关系到产品自身使用的可靠性及安全性&#xff0c;并且它还有可能对于同系统中的其他部分造成影响&#xff0c;不良的电磁兼容性会直接导致系统无法正常运转&am…

GIS数据转换器坐标生成功能

​很多时候我们会拿到一些没有坐标的图片或栅格数据&#xff0c;我们如何给它赋予坐标呢&#xff1f;下面介绍一种为这些数据生成坐标的方法。使用工具是GIS数据转换器-栅格-V4.0。 GIS数据转换器坐标生成功能 使用图片是这样的&#xff0c;网上找的不知道哪位大神画的三国时期…

【毕业季征文】追光人,终将光芒万丈!

追光人&#xff0c;终将光芒万丈&#xff01; 写在最前面最后从0到1 我的二进制探索之路一、从0到1&#xff0c;破茧成蝶二、从0到2n&#xff0c;全面发展三、从0到∞&#xff0c;逐光而行 参考 写在最前面 参与活动#毕业季征文|未来可期# 岁月不居&#xff0c;时节如流。转眼…

朋友轻松拿下字节27K的offer,羡慕了....

最近有朋友去字节面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…

C++ 范围for循环

1. 在C98中&#xff0c;不同的容器和数组&#xff0c;遍历的方法不尽相同&#xff0c;写法不统一&#xff0c;也不够简洁&#xff0c;而C11基于范围的 for循环以统一、简洁的方式来遍历容器和数组&#xff0c;用起来更方便了。 C 容器都有哪些 简单介绍&#xff1a; //STL C标…

7分钟的面试,我太难了.....

干了两年外包&#xff0c;本来想出来正儿八经找个互联网公司上班&#xff0c;没想到算法死在另一家厂子。 自从加入这家外包公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到11月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资…

leetcode-最大二叉树(java)

leetcode654题--最大二叉树 leetcode654 - 最大二叉树解题思路代码演示二叉树专题 leetcode654 - 最大二叉树 leetcode654 - 最大二叉树 原题链接 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中…

幻读与不可重复读的区分

幻读 VS 不可重复读 幻读重点在于数据是否存在。原本不存在的数据却真实的存在了&#xff0c;这便是幻读。 在同一个事务中&#xff0c;第一次读取到结果集和第二次读取到的结果集不同。引起幻读的原因在于另一个事务进行了INSERT操作。 不可重复读重点在于数…

中国人民大学与加拿大女王大学金融硕士——跟5月说再见,期待新的精彩

岁月清浅&#xff0c;时光无言。5月的风即将吹来6月的的绚烂&#xff0c;在这个美好的季节&#xff0c;你有新的期盼了吗&#xff1f;在职的你&#xff0c;是否需要再学习呢&#xff0c;中国人民大学与加拿大女王大学金融硕士项目为你提供在职读研的平台&#xff0c;在这里开启…

CMU 15-445 Project #0 - C++ Primer

Project #0 - C Primer 一、题目链接二、准备工作1.项目构建2.代码测试3.代码格式化4.压缩与提交 三、部分实现 一、题目链接 二、准备工作 以下操作在题目文档中均有提及&#xff0c;这里进行简要整理。 1.项目构建 首先需要从远程仓库克隆项目文件&#xff0c;由于该仓库会…

GB28181——实时视频显示

一、主要实现功能 1、支持四路设备接入 2、实时视频分屏显示 3、接入设备信息存储 二、待完善功能&#xff08;现阶段&#xff09; 1、设备的删除 &#xff08;已更新&#xff09; 2、语音对讲 &#xff08;暂时不处理&#xff09; 3、视频输出通道的实时修改 &#xff08;已更…