
C++ 基础
文章平均质量分 62
C++ 语法,常见问题记录,分享
令狐掌门
C++程序员,出版过《C++零基础入门视频教程》、《Qt高级进阶视频教程》、《C++ Qt6 QtQuick/QML入门进阶视频教程》、《PyQt PySide6零基础入门与项目实战》、《OBS源码分析与桌面录制视频教程》。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++学习书籍推荐
如果你想学习C++, 没必要先学C语言,C++学会了绝对会C语言。如果会C语言,再学C++会轻松一些。建议直接学习C++。下面推荐一些我读过的C++书籍, 我不是打广告,作者也没给我钱。纯属个人建议一 入门篇(1)C++ Primer, 本书提供了全部示例的源码,而且打印很好,字体大小合适,看着也舒服,可以花点时间多读几遍(2)C++ Primer plus, 不建议读,讲的太啰嗦了,而且字体很小,看着对眼睛不好。二提高篇(1)侯捷大师翻译的 C++ 内功心法,...原创 2020-11-09 01:04:22 · 17174 阅读 · 3 评论 -
linux C++代码调试技巧
选择合适的调试方法取决于具体的问题类型和复杂程度。对于简单问题,打印调试可能就足够了;对于复杂的内存问题,可能需要使用Valgrind或AddressSanitizer。原创 2025-07-08 16:02:39 · 354 阅读 · 0 评论 -
tcp长连接与短连接
TCP连接本身是一个传输层协议,它既可以实现长连接,也可以实现短连接。这取决于应用层的使用方式。原创 2025-07-07 17:26:35 · 418 阅读 · 0 评论 -
linux VFS简介
Linux VFS 是内核文件子系统的基石。它通过定义一组精妙的数据结构(inodedentryfile)和操作接口,在应用程序的通用文件操作请求和底层千差万别的具体文件系统实现之间架起了一座高效的桥梁。它使得 Linux 能够同时支持海量不同类型的文件系统,并为用户和应用开发者提供了极其简洁、一致的文件访问体验。理解 VFS 是深入理解 Linux 文件管理和存储机制的关键。原创 2025-06-22 23:37:27 · 606 阅读 · 0 评论 -
OpenGL多重渲染
这些输出将同时写入绑定的多个帧缓冲目标。原创 2025-05-26 14:31:45 · 421 阅读 · 0 评论 -
linux make使用方法
使用方式构建速度稳定性推荐用途make慢高调试、Makefile 不靠谱make -j4快中多核编译、大型项目make -j非常快中高性能机器、稳定项目。原创 2025-05-26 14:19:41 · 510 阅读 · 0 评论 -
记录一个C++编译错误在编译时出现error C2665: “std::lock_guard<std::mutex>::lock_guard”: 没有重载函数可以转换所有参数类型
的,线程安全操作(如加锁)仍然需要物理上的状态修改,因此互斥锁应声明为。在编译时出现error C2665: “std::lock_guard。::lock_guard”: 没有重载函数可以转换所有参数类型。lock(mtx);上面的代码std::lock_guard。成员函数中的成员变量默认被视为。这个编译错误的原因是:在。的构造函数需要接受一个。的成员变量默认被视为。如果遇到类似错误(如。,该编译错误应被解决。原创 2025-05-19 15:12:20 · 307 阅读 · 0 评论 -
C++ SFINAE
SFINAE是C++模板编程中的一个重要概念,全称是"Substitution Failure Is Not An Error"(替换失败不是错误)。它允许我们在编译期间基于类型特性选择正确的函数重载或模板特化。原创 2025-03-30 00:30:00 · 471 阅读 · 0 评论 -
C++萃取
萃取是一种用于从类型中"萃取"(提取)信息的技术,通常通过模板特化实现。获取类型的特性根据类型选择不同的算法为不同类型提供统一的接口// 迭代器萃取示例// 使用Iterator自身定义的类型// 为原生指针特化的萃取// 基于萃取的泛型函数// 使用萃取获取迭代器的值类型std::cout << "处理的元素类型大小: " << sizeof(value_type) << " 字节" << std::endl;// 使用迭代器处理元素...for (原创 2025-03-30 00:15:00 · 424 阅读 · 0 评论 -
C++ fallthrough
C++ 中的是一个用来明确表示switch语句中的标签之间的执行流会“掉入”下一个case标签的机制。在传统的switch语句中,如果没有break语句,程序会继续执行下一个case代码块的内容,这种行为称为“fallthrough”(掉入)。不过,这种行为容易导致错误,因为编译器不会给出明确的提示,通常会误导开发者。为了解决这个问题,C++17 引入了一个新的属性,它显式地告诉编译器和其他开发者:当前case语句的执行流会跳到下一个case,即“fallthrough”是有意为之,而不是一个错误。原创 2025-03-14 15:41:35 · 432 阅读 · 0 评论 -
C++ std::atomic_long compare_exchange_strong用法介绍
是其一个成员函数,用于实现一种无锁的原子比较和交换操作。以下是一个简单的代码示例,展示如何使用。是 C++ 标准库提供的原子类型,原创 2025-03-10 15:46:46 · 890 阅读 · 0 评论 -
TCP长连接与短连接
心跳机制是维持TCP长连接的关键技术,用于检测连接是否仍然有效,防止空闲连接被网络设备(如防火墙、路由器)关闭。心跳机制虽增加了少量网络开销,但在保持长连接稳定性方面发挥着重要作用,是长连接技术的基础保障。短连接是指客户端与服务器完成一次数据交换后就断开连接。下次需要通信时,再重新建立连接。在实际应用中,应根据具体业务需求、服务器承载能力和用户体验需求来选择合适的连接方式。长连接是指在一次TCP连接建立后保持连接状态,多次数据交换都复用这个连接。原创 2025-03-01 00:06:54 · 521 阅读 · 0 评论 -
C++程序员怎样转行大模型,deepseek是这样回答的
作为经验丰富的C++程序员转型大模型领域,可充分发挥系统级优化、高性能计算和工程落地的优势。原创 2025-02-23 17:14:04 · 558 阅读 · 0 评论 -
C++中间件DDS介绍
long id;IDL (Interface Definition Language) 文件用于定义消息的数据结构,DDS 会通过工具生成相应的 C++ 类型。原创 2025-02-20 17:31:04 · 1754 阅读 · 0 评论 -
C++解决走迷宫问题:DFS、BFS算法应用
DFS 的优点:适合用于深度较深或复杂的解空间,空间复杂度较低(相较于 BFS),实现简单,能够遍历所有可能的解。时间复杂度:通常是 O(n + m),其中 n 是节点数,m 是边数,适用于图和树结构。空间复杂度:O(h + n),其中 h 是最大深度,n 是节点数。对于递归实现,栈深度与树的深度或图的深度相关。DFS 更加适合处理需要深度优先探索的任务,特别是当你不关心最短路径时,DFS 能够迅速深入到可能的解空间深处。原创 2025-01-25 16:33:17 · 1202 阅读 · 0 评论 -
C++实现KMP算法
KMP 算法(Knuth-Morris-Pratt Algorithm)是一种高效的字符串匹配算法,旨在解决“在一个大字符串中查找一个模式字符串”的问题。其主要优点是,通过预处理模式串的“部分匹配表”或“前缀函数”,可以在匹配过程中避免重复的比较,减少时间复杂度。KMP 算法通过提前计算部分匹配表,避免了文本和模式串的重复比较,从而提高了效率。在最坏情况下,KMP 算法的时间复杂度为 O(n + m),相比暴力算法(O(n * m))显著提高了性能。通过合理设计lps。原创 2025-01-23 14:17:32 · 477 阅读 · 0 评论 -
C++ AES加密代码实现
AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,用于加密数据,广泛用于各种应用中。AES 是基于块的加密算法,它使用相同的密钥进行加密和解密。AES 的安全性来自于密钥的复杂性和多次的替代变换(SubBytes、ShiftRows、MixColumns、AddRoundKey),并且能够提供比传统算法更高的安全性和性能。AES 支持不同的密钥长度,常见的有 128 位、192 位和 256 位。原创 2025-01-15 11:35:35 · 908 阅读 · 0 评论 -
C++ RSA加密代码
RSA(Rivest-Shamir-Adleman)是一种广泛使用的非对称加密算法,它利用一对密钥来进行加密和解密:公钥和私钥。RSA的安全性基于大整数分解的难度,即将一个大数分解成两个素数的乘积是非常困难的。原创 2025-01-15 11:33:01 · 1012 阅读 · 0 评论 -
linux ext4文件系统
Ext4(第四扩展文件系统,简称为 EXT4)是Linux操作系统中广泛使用的日志文件系统。它是Ext3文件系统的后继者,提供了更多的特性和改进,以适应更大的存储设备和更复杂的文件系统操作。Ext4文件系统因其高性能、可靠性和丰富的特性而被广泛用于桌面、服务器和嵌入式系统。它是Linux中最流行的文件系统之一。原创 2024-12-27 13:59:46 · 612 阅读 · 0 评论 -
Linux C++ eventfd用法介绍
eventfd是一个系统调用,用于创建一个事件文件描述符。它可以用于向线程或进程发送信号。当事件发生时,文件描述符上的读取操作将返回一个特定值。eventfd是一个轻量级的线程间和进程间通知机制,能够简化事件驱动编程模型。通过其简单的读写操作,能够实现高效的同步和事件通知。在需要进行高效的线程同步时,eventfd是一个非常有用的工具。原创 2024-12-25 16:07:57 · 1251 阅读 · 0 评论 -
linux timerfd_create函数使用介绍
是 Linux 提供的一个系统调用,用于创建一个文件描述符,用来触发定时器事件。可以通过该文件描述符来监视定时器到期事件,例如用poll或select进行事件检测。这种机制常用于高效的事件驱动型程序。原创 2024-12-23 10:48:55 · 812 阅读 · 0 评论 -
linux prctl函数使用说明
prctl提供了强大的进程属性管理能力。设置进程名,方便调试和监控;配置 seccomp 来限制进程系统调用,提升安全性;配置父子进程通信行为。通过结合prctl的功能,开发者可以更加精细地控制进程行为。原创 2024-12-23 10:41:06 · 880 阅读 · 0 评论 -
Ubuntu Netlink 套接字使用介绍
通过以上代码,用户态程序和内核模块实现了简单的双向 Netlink 通信。根据实际需求,可以扩展消息内容和通信逻辑。原创 2024-12-19 14:33:43 · 819 阅读 · 0 评论 -
MQTT协议介绍与C++服务端客户端实现
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息发布/订阅协议,设计用于低带宽、高延迟、不稳定的网络环境,广泛应用于物联网(IoT)设备间的通信。其基于客户端-服务器架构,通常使用TCP/IP协议作为传输层协议。轻量级:头部开销小,适合低带宽环境。支持QoS(服务质量)QoS 0:最多一次传递。QoS 1:至少一次传递。QoS 2:只有一次传递。发布/订阅模式:客户端可以发布消息,也可以订阅消息,支持多对多通信。保持连接。原创 2024-12-19 09:04:18 · 2653 阅读 · 0 评论 -
C++ __attribute__((constructor))使用介绍
和是 GCC 提供的功能,用于在程序启动时自动执行初始化函数(构造函数)或在程序退出时自动执行清理函数(析构函数)。它们为程序初始化和清理提供了一种简单的方法,但需注意其跨平台性限制。原创 2024-12-17 14:20:07 · 1328 阅读 · 0 评论 -
C++ #和##的用法
#原创 2024-12-17 14:16:35 · 752 阅读 · 0 评论 -
C++ MQTT客户端库libmosquitto使用介绍
libmosquitto 是一个用于实现 MQTT 协议的 C 语言客户端库,它允许开发者在应用程序中集成 MQTT 功能,进行消息的发布和订阅。原创 2024-12-17 14:10:12 · 1064 阅读 · 0 评论 -
vs2022 C++代码编译时std::numeric_limits<T>::max/min()报错
解决办法。原创 2024-11-21 15:49:42 · 217 阅读 · 0 评论 -
字典树介绍以及C++实现
字典树(Trie),又称为前缀树或单词查找树,是一种树形数据结构,主要用于存储具有相同前缀的字符串集合。它特别适合用于词典中的单词查找、自动补全、拼写检查等应用。原创 2024-11-13 22:12:02 · 865 阅读 · 0 评论 -
快速UDP网络连接之QUIC协议介绍
这个算法在多媒 体网关拥塞控制有重要的地位。QUIC的FEC是使用的XOR的方式,即发N + 1个包, 多发一个冗余的包,在正常数据的N个包里面任意一个包丢了,可以通过这个冗 余的包恢复出来,使用异或可以做到切换网络操持连接。由于原始包和重传包的序列号是一样的,客户端不知道服 务器返回的 ACK 包到底是原始包的,还是重传包的。新的传输层协议通常会经过严格的设计,分析和评估可重复的结果,证明候选协议对 现有协议的正确性和公平性,开发新的传输层协议和它在操作系统进行广泛部署之间 通常需要花费数年的时间。原创 2024-06-16 15:01:14 · 3512 阅读 · 0 评论 -
linux c socket编程里SO_REUSEADDR的作用
这段代码的主要作用是设置 SO_REUSEADDR 选项,以允许在套接字处于 TIME_WAIT 状态时,其他套接字可以绑定到相同的本地地址和端口。这在服务器应用程序中特别有用,可以减少由于端口占用导致的启动失败问题。如果设置失败,代码会记录错误信息。在这个示例中,套接字创建成功后,使用 setsockopt 设置 SO_REUSEADDR 选项,以便允许地址重用。如果 setsockopt 调用失败,程序会输出错误信息并终止。setsockopt 函数用于设置套接字选项。原创 2024-06-03 20:24:13 · 570 阅读 · 0 评论 -
C++ CMake FetchContent用法介绍
CMake 的 FetchContent 模块是一个非常方便的工具,用于在构建过程中从远程位置下载和管理外部依赖项。通过 FetchContent,您可以在项目的 CMake 配置过程中下载、提取和添加外部项目,而不需要手动管理这些依赖项。原创 2024-06-03 09:12:58 · 2580 阅读 · 0 评论 -
C++实现生产者消费者模型
生产者-消费者模型是一种典型的多线程并发模式,常用于在一个共享缓冲区中协调生产者和消费者之间的数据传递。在C++中,我们可以使用标准库中的线程、互斥量和条件变量来实现该模型。原创 2024-05-29 01:11:36 · 854 阅读 · 0 评论 -
Windows hook介绍与代码演示
Windows Hook 是一种机制,允许应用程序监视系统或处理特定事件。它可以拦截和更改消息,甚至可以插入到其他应用程序的消息处理机制中。Windows 提供了多种挂钩类型,例如键盘挂钩、鼠标挂钩、消息挂钩等。原创 2024-05-28 23:02:32 · 979 阅读 · 0 评论 -
ubuntu strace命令
是 Linux 系统中的一个调试工具,用于跟踪并记录系统调用(system calls)和信号(signals)。在 Ubuntu 中,命令可以帮助开发者和系统管理员了解一个程序在运行时如何与操作系统内核进行交互,从而有助于诊断和调试问题。,可以深入了解程序的运行过程,找到并解决潜在的问题。例如下面的C++程序。原创 2024-05-28 21:23:22 · 709 阅读 · 0 评论 -
C++实现读写锁
在C++中,实现读写锁可以使用,它是C++17标准中引入的。读写锁允许多个线程同时读取一个共享资源,但在写入时,只允许一个线程对资源进行写入,并阻止其他线程读取或写入。下面是使用实现读写锁的示例代码,包括一个简单的共享数据访问类和在mainSharedDatareadDatawriteDatamain替换和为你的文件名和希望生成的程序名。这段代码在一个多线程环境下测试了读写锁的工作方式。原创 2024-04-07 08:15:00 · 1337 阅读 · 0 评论 -
C++手写链表、反转链表、删除链表节点、遍历、为链表增加迭代器
本篇博客介绍如何使用C++实现链表,首先编写一个简单的链表,然后增加模板,再增加迭代器。原创 2024-03-15 21:39:59 · 1671 阅读 · 0 评论 -
C++按逗号分割string保存到vector
C++按逗号分割string保存到vector原创 2024-01-27 09:44:48 · 673 阅读 · 0 评论 -
C++合并K个有序链表
本篇博客介绍如何使用C++合并k个有序链表,在代码中会用到std::priority_queue,首先需要介绍一下std::priority_queue的用法,介绍完std::priority_queue后将介绍如何使用std::priority_queue来辅助合并k个有序链表。原创 2024-01-08 21:18:44 · 1105 阅读 · 0 评论 -
linux sigaction函数使用介绍
在linux中函数 `sigaction` 用于检查或修改与指定信号相关联的处理动作。这个函数比 `signal` 函数提供了更多的控制能力,包括对信号处理的细粒度控制。原创 2024-01-08 21:18:03 · 597 阅读 · 0 评论