C++
文章平均质量分 69
C++标准库,设计模式,boost
semicolon_helloword
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 中 std::thread 详细使用方法、注意事项及线程实现原理
本文详细介绍了C++17中std::thread的使用方法和注意事项。主要内容包括:线程的创建方式(函数、lambda、函数对象)、参数传递规则(值传递需用std::ref包装引用)、生命周期管理(必须调用join或detach)、线程状态检查(joinable)以及移动语义支持。重点强调了避免数据竞争、异常安全和资源管理的注意事项,并分析了std::thread的底层实现原理(1:1线程模型)和内存模型机制。最后给出了多线程编程的最佳实践建议,如优先使用join、合理使用同步机制等,帮助开发者编写安全高效原创 2025-10-26 13:24:10 · 1106 阅读 · 0 评论 -
C++ 17 20 中的线程类说明
摘要: C++17和C++20在多线程编程中引入了多项增强功能,包括std::jthread(自动线程管理)、std::shared_mutex(读写锁)以及更完善的原子操作支持。核心类如std::thread、std::mutex、std::atomic和std::future分别用于线程创建、同步、无锁数据访问和异步操作。新特性如协作式中断(std::stop_token)提升了线程控制的灵活性。使用时需注意资源管理(避免未join的线程)、死锁预防、内存序选择及异常安全。示例代码展示了线程创建、读写锁原创 2025-10-26 13:10:25 · 934 阅读 · 0 评论 -
C++ regex 详细说明(一)
类名用途std::regex表示一个正则表达式对象存储匹配结果(sc判断整个字符串是否完全匹配在字符串中搜索匹配的子串替换匹配的部分项目建议✅ 使用场景文本验证、日志分析、数据提取、字符串清洗✅ 推荐做法复用regex对象、使用R"()"原始字符串、加const❌ 避免频繁构造、复杂正则用于高频场景、忽略异常🔍 调试技巧用在线正则测试工具(如 regex101.com)先验证模式C++ 的<regex>库功能强大,虽然性能不如专用库(如 RE2),但对于大多数应用已足够。原创 2025-10-19 14:20:44 · 853 阅读 · 0 评论 -
C++ 中引用详细说明
引用是某个已存在变量的别名(alias),一旦引用被初始化为某个变量,它就“绑定”到该变量上,之后对引用的操作就等同于对该变量的操作。特性说明本质变量的别名,底层常通过指针实现优点安全、简洁、高效(避免拷贝)用途函数参数、返回值、循环遍历、运算符重载等限制必须初始化、不能为空、不能重新绑定最佳实践多用const引用传递大对象,避免悬空引用引用是 C++ 中实现高效、安全编程的核心机制之一。理解其原理和使用场景,能让你写出更高效、更现代的 C++ 代码。原创 2025-10-19 14:08:30 · 671 阅读 · 0 评论 -
C++ 智能指针(1)
智能指针是现代C++(C++11及以上)中用于自动管理内存的核心工具,通过RAII原则将资源生命周期与对象绑定,确保资源自动释放。主要类型包括:unique_ptr(独占所有权,高效无开销)、shared_ptr(共享所有权,引用计数机制)和weak_ptr(弱引用,解决循环引用问题)。使用时应优先选择make_unique和make_shared,避免直接使用new,注意循环引用和所有权问题。智能指针能有效防止内存泄漏,简化内存管理,是现代C++开发的重要实践。原创 2025-10-07 10:07:52 · 545 阅读 · 0 评论 -
C++ 指针
指针是 C++ 的基石,它提供了直接操作内存的能力,带来了高效和灵活性。理解指针的核心概念——存储地址解引用指针算术以及动态内存管理——至关重要。然而,原始指针的使用需要极其谨慎,容易引发各种错误。因此,在现代 C++ 编程中,应优先考虑使用智能指针引用和标准库容器(如)来替代原始指针,以编写更安全、更易维护的代码。只有在确实需要底层控制或与 C 语言库交互时,才应谨慎使用原始指针。原创 2025-10-06 16:38:35 · 943 阅读 · 0 评论 -
C++ 编译原理
1. 预处理 g++ -E -std=c++11 hello.cpp -o hello.i # 2. 编译为汇编 g++ -S -std=c++11 hello.i -o hello.s # 3. 汇编为目标文件 g++ -c -std=c++11 hello.s -o hello.o # 4. 链接为可执行文件 g++ -std=c++11 hello.o -o hello。编译过程由编译器实现,而主流编译器(如 GCC、Clang)通过支持 C++11 标准来解析和生成符合该标准的代码。原创 2025-10-06 16:31:19 · 1146 阅读 · 0 评论 -
C++ 17中的初始化那些事
《C++17初始化详解》摘要:C++17通过统一初始化语法和聚合初始化的改进,显著增强了变量、结构体和类的初始化能力。文章详细介绍了基本变量初始化推荐使用{}防止窄化转换,结构体支持聚合初始化与结构化绑定,类初始化需区分有无构造函数,以及STL容器的统一初始化方式。特别强调了避免"最令人烦恼的解析"等常见陷阱,并提供了包括基本类型、数组、容器在内的完整示例,推荐优先使用{}列表初始化和结构化绑定来提高代码安全性与可读性。原创 2025-09-07 10:33:31 · 935 阅读 · 0 评论 -
C++ 中使用 iterator 中注意事项和优化技巧(2)
本文总结了C++迭代器的最佳使用实践:优先使用范围for循环(C++11)简化代码;对于只读访问使用const迭代器或cbegin()/cend();避免循环中重复调用end();用STL算法替代手动循环;根据场景选择正向/反向/随机访问遍历;使用引用避免大对象拷贝;利用C++20 ranges库实现函数式编程。关键原则包括:检查迭代器有效性、优先使用STL算法和自动类型推导、避免手动管理迭代器。这些技巧能提升代码安全性、性能和可读性,特别是在现代C++环境中。原创 2025-09-14 14:54:41 · 392 阅读 · 0 评论 -
C++ 中使用 iterator 中注意事项和优化技巧(1)
本文介绍了C++中使用迭代器的注意事项和优化技巧。重点包括:避免使用失效迭代器(容器修改后需重新获取)、正确在循环中执行erase操作(使用返回值更新迭代器)、避免有/无符号类型混用、不空容器解引用迭代器,以及不将end()视为固定地址。文章通过代码示例详细说明了常见错误及解决方案,并比较了不同容器的迭代器失效规则。掌握这些要点能有效避免运行时错误并提升程序性能。原创 2025-09-14 14:43:07 · 630 阅读 · 0 评论 -
C++ 11和20中的位域使用说明-1
C++位域(BitFields)是一种特殊的结构体成员,允许精确控制变量所占用的比特数而非默认字节数。通过语法struct {数据类型 成员名:位数;}声明,常用于内存优化、硬件寄存器交互和状态标志管理。位域能有效压缩数据存储空间,如用16位表示日期(5位日+4位月+7位年)或用1位布尔值表示状态标志。但使用时需注意:不可取地址、存在平台依赖性、可能有性能损耗,且结构体实际大小可能因内存对齐而大于位域总和。在嵌入式系统等内存敏感场景中非常有用,但跨平台开发时需谨慎处理位序问题。原创 2025-10-03 11:17:19 · 912 阅读 · 0 评论 -
C++中 optional variant any 的使用
C++17引入的std::optional、std::variant和std::any是类型安全的容器类工具:optional表示可能缺失的值,替代特殊标记值;variant是类型安全的联合体,可存储多种指定类型之一;any支持任意类型但需类型转换。三者各有特点:optional性能较好,variant适合固定类型集合,any灵活性最高但性能开销大。建议优先使用optional和variant,慎用any以保持类型安全。这些工具减少了指针和void*的使用,提升了代码的安全性和表达力,是现代C++开发的重要原创 2025-09-27 13:45:48 · 2838 阅读 · 0 评论 -
C++中多线程core的问题分析和总结
实践说明1. 每个线程独立处理异常使用包裹线程函数主体2. 使用std::async或便于跨线程传递异常3. 避免裸抛异常裸线程不自动处理异常4. 使用 RAII 管理资源如,防止异常导致死锁5. 主线程join()所有线程防止主线程提前退出导致未定义行为。原创 2025-09-14 14:09:02 · 632 阅读 · 0 评论 -
C++ 11和20中的位域使用说明-2
std::bitset是C++中处理固定大小位序列的模板类,适用于标志管理、权限控制等场景。支持从整数、字符串构造(C++20新增std::from_chars解析),提供位访问、设置/重置/翻转等操作,并可进行位运算。能转换为unsigned long/string等类型,超出范围会抛出异常。其类型安全、功能丰富、性能良好,常用于二进制数据处理、状态标志管理等场景。C++20增强了其解析能力和错误处理机制。原创 2025-10-03 11:40:55 · 304 阅读 · 0 评论 -
C++常用迭代器操作函数
功能:在范围内查找第一个满足谓词(predicate)条件的元素。函数原型// 查找第一个偶数});if (it!std::cout << "找到偶数: " << *it << std::endl;} else {std::cout << "未找到偶数" << std::endl;return 0;函数用途是否修改容器常见用法find_if查找首个满足条件的元素否获取元素位置remove_if移动不满足条件的元素到前面是(逻辑)erase-remove 惯用法count_if。原创 2025-09-27 13:17:58 · 863 阅读 · 0 评论 -
C++设计模式 原型模式
原型模式是一种创建型设计模式,它使用一个现有的对象实例作为原型,并通过复制该原型来创建新的对象实例。这种方法避免了每次都需要重新创建复杂对象的问题。或其派生类包含指针或其他需要深度复制的数据结构,则需要在。类,它代表几何形状,并且可以被复制。方法使用了浅复制(shallow copy)。方法中实现相应的深复制逻辑。方法来克隆这些对象。请注意,这个示例中的。原创 2024-10-13 20:33:24 · 615 阅读 · 0 评论 -
使用C++编写TCP服务端程序
要使用Boost.Asio库来开发一个TCP服务端程序,你需要遵循以下步骤。下面的示例代码将演示如何创建一个简单的异步TCP服务器,它能够接收客户端连接,并异步处理请求和响应。首先,确保你已经安装了Boost库,并在你的项目中包含了。原创 2024-07-08 09:58:19 · 627 阅读 · 0 评论 -
使用Boost.Asio编写TCP通信程序框架(一)
使用Boost.Asio编写TCP通信程序框架(一)原创 2024-07-08 10:06:18 · 929 阅读 · 0 评论 -
C++设计模式 单例模式
单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。原创 2024-10-13 20:06:43 · 533 阅读 · 0 评论 -
c++编写java模式的线程类
的默认析构函数会确保如果线程尚未结束,它会被正确地 join。标准库来创建和管理线程。然而,C++ 不像 Java 那样提供一个内置的。需要注意的是,C++11 不支持在构造函数中调用虚函数,所以我们使用了。类,而是提供了一个更底层的 API。类型的函数对象作为构造参数,这个函数对象将被用来创建并启动线程。的类,它将允许用户通过继承来重载。在 C++11 中,我们可以使用。方法是虚函数,子类可以通过继承。指针,从而允许在构造时传递给。类功能的 C++11 实现。方法来定义线程的行为。成员函数来启动线程。原创 2024-08-04 19:53:17 · 302 阅读 · 0 评论 -
c++编写生产者消费者模型
这样,当队列已满时,生产者线程将会阻塞,等待消费者线程消费数据以腾出空间。同样,当队列为空时,消费者线程也会阻塞,等待生产者线程填入数据。原创 2024-08-04 19:49:42 · 326 阅读 · 0 评论
分享