![](https://img-blog.csdnimg.cn/direct/11716e429afc4d9e9151fca82590fbfe.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 81
介绍C++相关的知识点,顺便巩固自己的技术栈
LeoLei8060
从事C++/Qt开发工作
展开
-
新特性之C++17
临时物质化是指在需要一个完整的对象时,将一个临时的prvalue(纯右值)表达式转换为一个临时对象的过程。当 prvalue 需要作为引用的初始化值时: 如果一个 prvalue 被用作初始化一个引用,那么这个 prvalue 将会物质化为一个临时对象,以便引用可以绑定到它上面。在 prvalue 作为函数参数传递时: 如果函数参数是按值传递的,而传递的实参是 prvalue,那么这个 prvalue 将物质化为一个临时对象,然后将其传递给函数。在 prvalue 作为函数的返回值时。原创 2024-07-04 16:36:33 · 1640 阅读 · 0 评论 -
新特性之C++14
C++14 旨在修复 C++11 的一些缺陷,并提供了一些重要的增强功能,以简化开发者的日常编码工作。主要的新特性包括泛型 lambda、返回类型推导、二进制字面量以及标准库的一些改进。C++14 通过引入和优化多项新特性,使得编程更加简洁、高效。它不仅改进了 C++11 的不足之处,还为开发者提供了更强大的工具,以编写更安全、性能更高的代码。无论是在泛型编程、编译期计算,还是在日常编码中,C++14 都展示了其巨大的价值。原创 2024-07-03 17:27:14 · 455 阅读 · 0 评论 -
深入理解和实现Windows进程间通信(共享内存)
Windows共享内存(Shared Memory in Windows)是一种操作系统机制,允许不同的进程(程序)共享一段内存空间。这意味着多个进程可以同时访问同一个内存区域,用以交换数据或进行通信,这是进程间通信(IPC)的一种形式。使用共享内存通常可以提高应用程序之间的数据交换效率,因为它避免了数据的复制过程,直接在内存中进行读写。基于实际的磁盘文件或系统分页文件来创建内存映射文件对象。原创 2024-06-21 10:56:54 · 1443 阅读 · 0 评论 -
深入理解和实现Windows进程间通信(信号量)
信号量(Semaphore)是一个非常重要的同步机制,用于控制多个线程或进程对共享资源的访问。其基本思想是使用一个整数变量来表示可用资源的数量,通过对这个整数的操作来控制资源的分配,从而实现对竞态条件的管理。信号量的操作是原子的,即在一个操作进行的过程中,不会被其他进程或线程中断。功能:创建或打开一个命名或无名的信号量对象。声明参数lpSemaphoreAttributes:指向一个结构,该结构决定返回的句柄是否可以被子进程继承。如果为NULL,则句柄不可继承。原创 2024-06-21 09:44:17 · 1279 阅读 · 0 评论 -
深入理解和实现Windows进程间通信(消息队列)
Windows操作系统使用消息机制来促进应用程序与操作系统之间的通信。每当发生事件(如键盘按键、鼠标移动或系统事件)时,操作系统都会生成相应的消息。这些消息被发送到一个特定的消息队列中,随后由应用程序的消息循环处理。GetMessage这四个接口是Windows消息处理的核心,它们各自承担着不同的角色和功能。原创 2024-06-20 16:57:18 · 1281 阅读 · 0 评论 -
深入理解和实现Windows进程间通信(管道)
管道是共享内存的一部分,用于促进进程之间的通信。Windows支持两种类型的管道:匿名管道和命名管道。这两种管道虽然在使用场景和功能上有所区别,但底层实现原理都是基于操作系统的内核管理,涉及内存管理、数据同步和进程间安全通信。原创 2024-06-20 11:22:34 · 670 阅读 · 0 评论 -
C++强类型别名(一)
C++、强类型、构造函数、标签调度原创 2024-05-17 16:46:26 · 318 阅读 · 0 评论 -
C++强类型别名(二)
C++、类型别名、接口原创 2024-05-20 14:50:40 · 511 阅读 · 0 评论 -
【C++奇技淫巧】CRTP(奇特重现模板模式)
使用虚函数有性能问题,需要优化,可以将虚函数转成CRTP(后续文章会介绍)能够抽象出通用方法,派生类只使用方法,不重写/修改方法需要基于现有的通用方法来添加新功能(不改变通用方法)其实在使用CRTP和虚函数的核心区别是,CRTP的继承关系中能够抽象出通用方法,且不会修改通用方法;而虚函数是抽象出通用方法,但要重写方法,只是把通用方法当做一个入口。原创 2024-05-31 16:09:24 · 1294 阅读 · 1 评论 -
深入理解C++三五零法则
三五零法则就是三法则(The Rule of Three)、五法则(The Rule of Five)、零法则(The Rule of Zero)。三五零法则是和C++的特殊成员函数有关,特别是那些涉及对象如何被创建、复制、移动和销毁的函数。这些法则提供了指导原则,帮助开发者设计和实现那些管理资源(如动态内存、文件句柄等)的类。原创 2024-06-07 04:30:00 · 1161 阅读 · 0 评论 -
深入理解C++多线程系列——thread
详细介绍C++ std::thread原创 2024-06-06 05:00:00 · 1337 阅读 · 0 评论 -
深入理解C++多线程系列——线程基础
算数逻辑单元(ALU)ALU是CPU的计算核心,负责执行所有的算数运算(如加减乘除)和逻辑运算(如比较大小、与、或、非等)。ALU根据控制单元发来的指令进行相应的数据处理。控制单元(CU)控制单元负责从内存中取出指令,解析并执行它们。它控制CPU内部和CPU与其他计算机组件之间的数据流动,确保各个部件协调一致。寄存器寄存器是CPU内部非常小但速度极快的存储设备。它们用于暂存指令、数据和地址等信息。寄存器的使用极大地提高了CPU的处理速度和效率。缓存。原创 2024-06-05 14:28:17 · 980 阅读 · 0 评论 -
快速入门C++正则表达式
特殊字符在正则表达式中的作用是非常重要的,可以定义一系列的匹配规则。描述匹配除换行符(\n)外的任意单个字符。如果要匹配字符,请用\.。[.]内的匹配的是而不是任意单个字符(.)内的匹配的是任意单个字符,而不是示例a.c匹配的是abcacc等,但无法匹配ac[a.c]匹配的是ac,但无法匹配abc描述匹配前面子表达式任意多次(包含0次)。如果要匹配字符,请用\*。子表达式的意思是可以单独拎出来作为正则表达式的字符串在匹配时必须保证的前面有子表达式[*]内的匹配的是字符示例ab*c。原创 2024-06-04 16:56:28 · 1162 阅读 · 0 评论 -
深入理解C++智能指针系列(六)
所以,出现这个错误的原因就是因为pimpl的特性是在类中使用不完全定义的类型,当由编译器生成默认析构函数时会导致头文件中delete一个不完全定义的类型对象。所以,我们必须显式定义Shapepublic:Shape();// 构造函数~Shape();// 析构函数需要显式定义// 示例公共方法private:// 前置声明内部实现类// 指向实现的智能指针public:// 实现细节,例如绘制图形// Shape 成员函数实现。原创 2024-05-28 10:09:12 · 285 阅读 · 0 评论 -
深入理解C++智能指针系列(五)
前面两篇介绍了的自定义删除器以及如何优化删除器的使用。本文将介绍在使用过程中的一些“奇技淫巧”。原创 2024-05-28 05:30:00 · 456 阅读 · 0 评论 -
深入理解C++智能指针系列(四)
在上一篇介绍了的删除器,其实,在大多数时候,我们使用时,不需要使用自定义删除器。本文主要介绍一种方法来优化上面的代码。原创 2024-05-28 05:30:00 · 492 阅读 · 0 评论 -
深入理解C++智能指针系列(三)
在现代软件开发中,内存管理是一个核心主题,特别是在使用C++这类需要手动管理内存的语言时。智能指针作为一种高效的工具,能够简化内存管理的复杂性。本文将讨论如何利用 std::unique_ptr 来封装复杂的内存管理任务,特别是在涉及栈上对象和多态性时的情况。通过使用定制删除器(custom deleter),我们可以灵活地控制内存的释放行为,从而适应更多复杂的使用场景。原创 2024-05-27 15:23:20 · 329 阅读 · 0 评论 -
深入理解C++智能指针系列(二)
在现代软件开发中,智能指针是管理动态分配内存的首选工具,尤其是在C++语言中。智能指针不仅自动管理内存,还通过其设计揭示了代码的意图,增强了代码的可读性和健壮性。在本系列文章的第二篇中,我们将深入探讨各种智能指针的类型和用法,解析它们如何表达代码设计,以及如何通过阅读代码来理解设计意图。原创 2024-05-27 14:18:38 · 951 阅读 · 0 评论 -
深入理解C++智能指针系列(一)
都知道C/C++的最难的就是需要程序员自己管理内存,往往会因为一个简单的逻辑错误导致内存管理异常。当开发者忘记释放已分配的内存时,就会发生内存泄漏。这种情况在大型项目中非常常见,项目中存在大量动态内存操作时,很容易遗漏释放操作。当一个指针被释放后继续被使用,它就变成了空悬指针。这种指针指向已被释放的内存,继续使用这种指针会导致不可预测的行为和程序崩溃。如果同一个内存地址被释放多次,会发生双重释放错误,这可能导致程序崩溃或其他问题。使用new分配内存时应该使用delete来释放,对于使用new[]原创 2024-05-25 22:24:28 · 749 阅读 · 0 评论 -
【C++扩展】函数别名
上面这段代码看着是不是很不合理,为什么不直接调用d函数,而非要通过f函数来调用d函数?原创 2024-05-24 23:01:00 · 598 阅读 · 0 评论 -
深入理解C++多态-虚函数
C++多态的实现方式可以分为静态多态和动态多态,其中静态多态主要有函数重装和模板两种方式,动态多态就是虚函数。原创 2024-05-23 21:45:09 · 1206 阅读 · 0 评论 -
内存布局介绍
内存布局、C++原创 2024-05-21 10:44:46 · 142 阅读 · 0 评论 -
深入理解C++可调用对象
C++、可调用对象、function、Lambda表达式原创 2024-05-21 10:20:58 · 1215 阅读 · 0 评论 -
深入理解C++移动语义
std::move、移动语义、新特性、C++原创 2024-05-17 16:13:21 · 522 阅读 · 0 评论 -
深入理解C++值类别体系——深入扩展
C++、纯右值、值类别、汇编、寄存器原创 2024-05-16 23:36:22 · 850 阅读 · 0 评论 -
深入理解C++值类别体系
C++、值类别、移动语义、C++11、C++17、新特性原创 2024-05-15 16:33:05 · 1099 阅读 · 0 评论 -
深入理解占位符类型说明符:C++11到C++20的逐步演化
C++、auto、decltype、模板原创 2024-05-14 10:46:22 · 598 阅读 · 0 评论 -
深入理解Lambda表达式:C++11到C++20的逐步演化
Lambda、C++11、C++14、C++17、C++20原创 2024-05-13 16:18:42 · 1206 阅读 · 0 评论