
C++20_第一篇
语言特性 概念Concepts 概述 概念用于约束模板参数,提供了一种简洁的方式来指定模板参数的要求 约束模板参数,增强代码可读性和错误提示 示例 示例1 示例2 范围库(Ranges) 概述 提供声明式数据操作,支持惰性求值和链式调用 示例 过滤偶数并平方 协程(Corouti...
语言特性 概念Concepts 概述 概念用于约束模板参数,提供了一种简洁的方式来指定模板参数的要求 约束模板参数,增强代码可读性和错误提示 示例 示例1 示例2 范围库(Ranges) 概述 提供声明式数据操作,支持惰性求值和链式调用 示例 过滤偶数并平方 协程(Corouti...
等待事件或其他条件 如果一个线程正等待着第二个线程完成一项任务,它有几个选择。 可以一直检测共享数据(由互斥量保护)中的标识,并且让第二个线程在完成任务时设置该标识。 浪费资源 使用std::this_thread::sleep_for(),让等待的线程在检查之间休眠一会儿 得到...
理解 protobuf允许不同编程语言的程序员 以自己熟悉的方式在.proto文件里定义消息结构 然后protobuf的引擎把这个.proto文件里描述的消息结构进行解析,最后生成对应语言的代码,这些代码里描述了之前定义的消息结构 然后在项目中,需要用到这些消息结构的模块,只需引...
接收器 接收器是实际将日志写入其目标的对象 每个接收器应该只负责单个目标(例如文件、控制台、数据库) 并且每个接收器都有自己的格式化程序对象的私有实例 spdlog的接收器有_mt(多线程)或_st(单线程)后缀来指示线程安全 旋转接收器 当达到最大文件大小时,关闭文件,重命名它...
导读 explicit 将构造函数声明为explicit,禁止编译器执行非预期(不是我们想要的)的类型转换。 除非我们有一个很好的理由,允许构造函数被用来进行隐式类型转换,否则我们应该把它声明为explicit的。 拷贝构造函数&&拷贝赋值操作符 拷贝构造函数被用...
SetMsgHandled 当用户在自己的消息映射表中增加一个消息处理函数,而且是插入在映射表的CHAIN_MSG_MAP(SHostWnd)前(也应该在此之前,否则很可能就收不到消息)。 默认情况下会自动标志该消息已经被处理了,如此一来就不会继续交给SHostWnd处理。 解决...
概述 zlib库是一个广泛使用的压缩/解压缩库 下面实现是用了zlib 1.3版本的代码和相关库 具体是使用了zlib源码中带的minizip 其中的minizip扩展提供了处理ZIP文件的功能 解压 在解压之前可能需要处理其他的很多工作,比如验证目录,验证目标文件是否存在等。这...
引用折叠 概述 引用折叠(Reference Collapsing)是C++11引入的机制,用于处理模板编程中多重引用组合的类型推导问题 当间接生成“引用的引用”(如通过模板参数推导、类型别名等)时,编译器会根据规则将其折叠为单一引用类型 它的核心目的是支持完美转发(Perfec...
类中的类类型静态成员变量 概述 对于类类型的静态成员变量,即使没有被使用,也会执行这个静态成员变量的构造和析构。 对于int,double基础类型,如果没有用到,编译器可能不为它分配内存。 使用 老用法 C++17 函数中的类类型静态对象 概述 如果函数没有被调用过,该静态对象就...
static_cast 用来完成编译器认可的隐式类型转换。 任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。 范围: 基本数据类型之间的转换。 派生体系中向上转型:将派生类指针或引用转化为基类指针或引用。 任意类型指针与void*之间的转换...
搜索当前标签