C++
文章平均质量分 71
JANGHIGH
曾经的少年还是那个少年
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
c++ 多线程(四)
lock_guard:简单、高效,适合大多数不需要复杂控制的情况:功能丰富、灵活,适合需要条件变量、手动控制或超时机制的情况在实际开发中,优先考虑使用lock_guard,只有在需要的特定功能时才使用它,因为lock_guard的性能开销更小。原创 2025-12-10 21:38:57 · 296 阅读 · 0 评论 -
c++ 多线程(三)
【代码】c++ 多线程(三)原创 2025-12-10 13:23:22 · 251 阅读 · 0 评论 -
c++ 多线程(一)
本文介绍了C++多线程编程的基本概念和使用方法。主要内容包括:1)使用全局函数、静态函数和lambda表达式作为线程入口;2)传递参数给线程函数的多种方式,包括值传递、引用传递(std::ref)和指针传递;3)通过future和packaged_task获取线程返回值;4)线程安全注意事项。文中提供了多个代码示例,演示了如何创建线程、传递参数、处理返回值以及避免常见问题。特别强调了引用参数需要使用std::ref包装,以及如何正确处理线程返回值等关键点。原创 2025-12-10 09:37:52 · 308 阅读 · 0 评论 -
c++ 位域(bit-fields)和 volatile 关键字
/ 结构体中的位域// 占用 1 位// 占用 3 位// 未命名位域,填充 4 位// 占用 8 位// 二进制值:1// 二进制值:101// 二进制值:01111111// 输出:4 bytes(假设 unsigned int 为 4 字节)// 错误:无法取位域成员的地址return 0;原创 2025-03-13 10:52:06 · 1160 阅读 · 0 评论 -
c++ 嵌套名字空间和匿名名字空间
嵌套名字空间用于代码的模块化组织,支持逻辑分层(如),C++17 简化语法提升可读性。匿名名字空间实现翻译单元内部的私有逻辑,避免全局命名污染,比static更符合 C++ 规范。合理使用嵌套名字空间和匿名名字空间,可以显著提升代码的可维护性和封装性。原创 2025-03-13 10:17:19 · 566 阅读 · 0 评论 -
c++ 嵌套类(Nested Class)、局部类(Local Class)
嵌套类:用于逻辑紧密关联的类设计,隐藏实现细节。局部类:用于函数内部的一次性封装,简化局部逻辑。合理使用这两种特性可以提升代码的封装性和可维护性,但需避免滥用导致结构混乱。原创 2025-03-13 10:12:28 · 483 阅读 · 0 评论 -
c++ union使用笔记
C++联合(union)是一种特殊的数据结构,允许在相同内存位置存储不同的数据类型,其核心价值在于。(所有成员共享同一块内存)。:通过枚举标记联合当前存储的数据类型,避免错误访问。对于需要更安全的类型存储,推荐使用。原创 2025-03-13 09:08:18 · 559 阅读 · 0 评论 -
c++ enum使用笔记
前向声明需指定底层类型(C++11起):// 头文件中声明// 源文件中定义无作用域枚举:简单但易命名冲突,隐式转整型。有作用域枚举(推荐):类型安全,避免污染作用域,需显式转换。底层类型:控制枚举项的存储大小,支持前向声明。初始化:灵活指定值,适用于位掩码或特定编码场景。原创 2025-03-12 22:22:27 · 1158 阅读 · 0 评论 -
c++ 异常捕获中的function-try-block
在C++中,使用保护初始化逻辑,主要针对构造函数或析构函数中的异常处理。原创 2025-03-12 15:20:41 · 482 阅读 · 0 评论 -
c++ 异常处理2
【代码】c++ 异常处理2。原创 2025-03-12 14:48:02 · 333 阅读 · 0 评论 -
c++ 异常处理1
【代码】C++ 异常处理1。原创 2025-03-12 14:14:23 · 1007 阅读 · 0 评论 -
c++20 Concepts的简写形式与requires 从句形式
在 C++20 Concepts 中,使用简写形式的与使用完整形式的是等价的。原创 2025-03-11 22:27:39 · 469 阅读 · 0 评论 -
c++ constraints与concepts使用笔记
(1) 单参数 Concept// OK// 错误:int没有size()方法(2) 多参数 Concept// 使用两参数Concept// OK,char + int 返回int。原创 2025-03-11 21:56:51 · 381 阅读 · 0 评论 -
c++ 类模板与类成员函数模板(深入)
模板代码的调试复杂度较高,建议配合C++20的Concept特性进行类型约束。类模板允许开发者编写与类型无关的通用类结构,通过模板参数实现泛型编程。在非模板类中定义函数模板,允许成员函数支持多类型参数。:当类模板被具体使用时(如创建对象、调用成员函数)。在类模板中定义成员函数模板,实现更灵活的泛型操作。:编译器根据代码使用自动生成具体类。:手动指定模板参数生成具体类。为特定类型提供完全不同的实现。为特定类型模式提供优化实现。原创 2025-03-11 16:47:40 · 497 阅读 · 0 评论 -
c++ 类模板与类成员函数模板(简单)
类模板:用于定义通用的类,支持多种类型。显式实例化:明确指定类模板的实例化类型。隐式实例化:编译器根据使用场景自动实例化。类成员函数模板:类中的成员函数可以是模板函数。类模板特化:为特定类型提供特殊的实现。通过合理使用类模板及其特性,可以编写出高效且灵活的代码。原创 2025-03-11 15:49:50 · 527 阅读 · 0 评论 -
c++ 模板函数
显式实例化定义是指在代码中明确指定模板函数针对某种类型的实例化。int(int);// 显式实例化定义// 显式实例化定义(省略模板参数)模板的显式实例化定义和特化必须遵守一处定义原则(ODR),即在整个程序中只能有一个定义。显式实例化声明可以出现在多个编译单元中,但定义只能出现一次。显式实例化:用于控制模板函数的实例化,避免重复实例化。特化:为模板函数针对特定类型提供特殊实现。特化与重载:特化是模板的一部分,重载是独立的函数。模板形参推导:编译器根据实参推导模板参数。原创 2025-03-11 11:44:58 · 544 阅读 · 0 评论 -
c++ 空基类优化与[[no_unique_address]]属性
/ 空分配器类(无状态)public:// 容器类:通过组合使用空分配器,并优化其存储private:T* data;// 可能不占空间// 输出:16(仅指针和size)return 0;优先使用EBO:当需要继承空类(如策略类、标签类)时,利用编译器强制优化。优先使用:当需要组合空类对象时,提供更灵活的内存优化手段。避免滥用:确保代码可读性,仅在性能敏感场景使用这些优化。原创 2025-03-11 09:39:54 · 532 阅读 · 0 评论 -
c++ 多重继承与虚继承
特性多重继承虚继承用途组合多个类的功能解决菱形继承问题,避免数据冗余和二义性语法基类构造顺序按继承顺序依次构造虚基类由最底层派生类直接构造内存开销可能较高(多个基类实例)通过指针共享基类,略微增加开销最佳实践仅在需要组合多个独立功能时使用多重继承。遇到菱形继承问题时,必须使用虚继承。优先使用组合(对象成员)代替多重继承,降低复杂性。原创 2025-03-11 09:32:39 · 647 阅读 · 0 评论 -
c++ 通过基类指针在容器中保存不同类型对象
在C++中,通过基类指针在容器中保存不同类型对象的核心思路是利用多态和智能指针管理动态内存。原创 2025-03-11 09:27:01 · 426 阅读 · 0 评论 -
c++ 类继承中的构造函数、拷贝控制成员与析构函数行为详解
【代码】c++ 类继承中的构造函数、拷贝控制成员与析构函数行为详解。原创 2025-03-10 17:13:26 · 1125 阅读 · 0 评论 -
c++ 虚函数使用笔记
虚函数是 C++ 多态的核心机制,通过动态绑定实现灵活的运行时行为。的核心机制,允许通过基类指针或引用调用派生类的函数。:通过基类指针或引用调用虚函数时,实际执行的是。标记,强制派生类实现。可以声明为虚函数,构造函数不能是虚函数。原创 2025-03-10 13:56:45 · 734 阅读 · 0 评论 -
c++ dynamic_cast使用笔记
主要用于处理多态类型(即包含虚函数的类)。:基类必须至少有一个虚函数(如虚析构函数)。是处理多态类型安全的利器,但需谨慎使用。往往意味着设计需要重构。:始终检查指针是否为。原创 2025-03-10 11:41:36 · 719 阅读 · 0 评论 -
c++ 操作符重载详解与示例
操作符重载允许为自定义类型赋予与内置类型相似的操作行为,但需遵循特定规则。以下从基本规则、实现方式、具体运算符示例及注意事项展开讲解。原创 2025-03-07 15:39:43 · 953 阅读 · 0 评论 -
c++ 类成员指针及其与`std::bind`交互使用的简单说明
可以将成员指针与对象实例绑定,生成一个可调用对象。),需确保对象在调用时仍然有效。它们需要通过类的实例来访问具体成员。表示第二个参数,依此类推。关于C++类成员指针及其与。原创 2025-03-07 11:19:05 · 752 阅读 · 0 评论 -
c++ 运算符优先级的中文表格
C++运算符优先级的中文表格原创 2025-03-07 11:08:08 · 452 阅读 · 0 评论 -
c++ 类特殊成员函数的编译器隐式声明规则
移动语义的隐式生成若用户声明了拷贝操作(拷贝构造/拷贝赋值)、析构函数或移动操作中的任意一个,编译器不会自动生成移动操作。若未声明上述函数,且类支持移动语义(如无不可移动的成员),编译器会生成默认移动操作。拷贝语义的隐式生成若用户声明了移动操作,编译器不会自动生成拷贝操作(需手动定义)。析构函数的特殊影响若用户声明析构函数,编译器不会生成移动操作,但保留默认拷贝操作。原创 2025-03-06 15:32:33 · 478 阅读 · 0 评论 -
c++ 拷贝赋值(Copy Assignment)、移动赋值(Move Assignment)
特性拷贝赋值移动赋值参数类型const T&(左值引用)T&&(右值引用)资源操作深拷贝资源转移(避免拷贝)自赋值处理必须检查建议检查性能较低(需拷贝数据)高(直接转移指针)适用场景常规赋值操作临时对象或显式转移资源(std::move。原创 2025-03-06 14:25:06 · 635 阅读 · 0 评论 -
c++ 拷贝构造函数、移动构造函数
拷贝构造函数用于创建一个新对象,并将其初始化为另一个对象的副本。参数是一个常量引用(),表示源对象。通常用于深拷贝,即复制源对象的所有资源。移动构造函数用于将资源从一个对象“移动”到另一个对象,而不是复制资源。参数是一个右值引用(),表示源对象。通常用于优化性能,避免不必要的深拷贝。拷贝构造函数当需要创建对象的独立副本时。当对象通过值传递或返回时。移动构造函数当对象是临时对象(如函数返回值)时。当显式使用std::move移动对象时。当需要优化性能,避免不必要的深拷贝时。原创 2025-03-06 11:19:42 · 1122 阅读 · 0 评论 -
c++ 友元(friend)
友元函数:允许一个普通函数或另一个类的成员函数访问类的私有和保护成员。友元类:允许一个类访问另一个类的私有和保护成员。使用场景:当两个类或函数需要紧密协作时,可以使用友元机制。注意事项:友元机制破坏了封装性,应谨慎使用。原创 2025-03-06 10:02:25 · 887 阅读 · 0 评论 -
c++ 类的静态成员函数
public:// 声明静态成员函数// 定义静态成员函数(不需要 static 关键字)// 函数实现静态成员函数是与类本身关联的函数,不依赖于类的实例。它们可以直接通过类名调用,主要用于操作静态成员变量或提供与类相关的工具函数。合理使用静态成员函数可以提高代码的模块化和可读性。原创 2025-03-06 09:41:12 · 538 阅读 · 0 评论 -
c++ 类的常量成员函数
在类的成员函数末尾加上const关键字,表示该函数不会修改对象的状态。这种函数可以在const对象上调用,同时也可以提高代码的可读性和安全性。合理使用const成员函数是编写高质量 C++ 代码的重要实践之一。原创 2025-03-06 09:21:37 · 939 阅读 · 0 评论 -
c++ inline关键字2
在类中使用inline关键字可以提高小型成员函数的性能。隐式内联适用于类内部直接实现的函数,而显式内联适用于类外部定义的函数。原创 2025-03-06 08:58:24 · 421 阅读 · 0 评论 -
c++ inline关键字1
inline适用于小型、频繁调用的函数,能提升性能,但需谨慎使用,避免代码膨胀。原创 2025-03-06 08:53:46 · 504 阅读 · 0 评论 -
c++ Lambda 表达式使用笔记
Lambda 表达式是 C++11 引入的一种匿名函数,用于定义轻量级的可调用对象。通过以上内容,你可以全面掌握 lambda 表达式的基本语法、使用注意事项以及深入应用场景。IIFE 是一种在定义 lambda 表达式后立即调用的技术,通常用于限制变量的作用域。Lifting 是指将 lambda 表达式提升为函数对象,以便在更广泛的上下文中使用。参数列表与普通函数的参数列表类似,用于定义 lambda 表达式的输入参数。函数体是 lambda 表达式的实现部分,包含具体的逻辑代码。原创 2025-03-04 13:34:15 · 884 阅读 · 0 评论 -
c++ std::bind、std::bind_front使用笔记
用于创建一个新的可调用对象,该对象将部分或全部参数绑定到另一个可调用对象上。它可以用来修改函数的调用方式,例如改变参数的顺序、固定某些参数的值等。的简化形式,专门用于绑定可调用对象的前几个参数。的使用方法、应用场景以及需要注意的事项。通过以上示例和说明,你可以更好地理解。更简洁,且不需要使用占位符。原创 2025-03-04 11:45:34 · 379 阅读 · 0 评论 -
c++ 并发算法使用注意事项中线程安全性、数据竞争问题
线程安全性:确保多线程环境下共享数据的正确性。数据竞争:多个线程同时访问共享数据可能导致程序行为异常。解决方法使用互斥锁(std::mutex)保护共享数据。使用原子操作()确保操作的原子性。避免共享数据,例如使用线程本地存储。通过合理使用同步机制和设计,可以避免线程安全性和数据竞争问题,确保多线程程序的正确性和性能。原创 2025-03-04 08:59:40 · 647 阅读 · 0 评论 -
c++ std::execution::seq、std::execution::par、std::execution::par_unseq、std::execution::unseq并发算法
C++17 引入了并行执行策略,允许标准库中的许多算法在多线程环境下并行执行。C++20 进一步扩展了这些策略,增加了向量化执行的支持。以下是并发算法的详细介绍、适用容器以及使用注意事项。并发执行策略seq(顺序)、par(并行)、par_unseq(并行+向量化)、unseq(向量化)。适用容器:支持随机访问迭代器的容器(如std::array注意事项:线程安全性、数据竞争、性能开销、向量化限制等。并发算法可以显著提升程序的性能,但需要根据具体场景选择合适的执行策略,并注意线程安全和性能优化。原创 2025-03-04 08:53:27 · 696 阅读 · 0 评论 -
c++ 特殊迭代器
插入迭代器:用于将元素插入容器。流迭代器:用于将流当作序列处理。反向迭代器:用于从容器的末尾向开头遍历。移动迭代器:用于将元素从一个容器移动到另一个容器。并发算法:通过执行策略实现并行化,提升性能。原创 2025-03-04 08:32:40 · 393 阅读 · 0 评论 -
c++ 迭代器分类及详细讲解
迭代器的分类决定了它们的功能和性能特性。泛型算法通过利用迭代器的不同类型来实现高效的操作。理解迭代器的分类及其典型应用,有助于编写高效且通用的C++代码。原创 2025-03-03 22:29:06 · 686 阅读 · 0 评论 -
c++ accumulate、find、count、fill、fill_n、copy、sort、unique 泛型算法
在C++中,STL(标准模板库)提供了许多泛型算法,用于处理容器中的元素。以下是你提到的几种算法的函数声明及其简单使用示例。原创 2025-03-03 17:03:28 · 878 阅读 · 0 评论
分享