C++Lambda
C++Lambda C++ 的 Lambda 表达式(lambda expression)是一种 轻量级函数对象,可以在需要函数对象的地方(如算法或回调)快速定义匿名函数。它在 C++11 中引入,后续版本也有增强(如 C++14、C++17、C++20)。 Lambda 的基本语法 [capture](parameters) -> return_type { funct...
C++Lambda C++ 的 Lambda 表达式(lambda expression)是一种 轻量级函数对象,可以在需要函数对象的地方(如算法或回调)快速定义匿名函数。它在 C++11 中引入,后续版本也有增强(如 C++14、C++17、C++20)。 Lambda 的基本语法 [capture](parameters) -> return_type { funct...
C++多线程进阶 1. 异步任务 std::async 和 std::future #include <future> #include <iostream> int compute() { return 123; } int main() { auto fut = std::async(std::launch::async, compute)...
C++多线程基础 1. 多线程基础 多线程是指一个程序中同时运行多个执行流(线程),能够充分利用多核CPU,提高程序并发性和效率。C++11 标准引入了官方的多线程支持,主要在 <thread>, <mutex>, <condition_variable> 等头文件中提供相关API。 2. 主要类和组件 2.1 std::thread 表示...
C++信号处理 C++ 中的信号处理(signal handling)指的是程序在运行过程中响应特定异步事件(通常由操作系统发送的信号)的能力。信号机制在 UNIX/Linux 系统中较常见,主要用于处理诸如中断、终止、算术错误、非法访问等异常事件。 信号的基本概念 信号是一种异步通信机制,由操作系统发送给进程,以通知发生了某种事件。每种信号都有一个编号和名称,例如: ...
C++预处理器 C++ 的预处理器(Preprocessor)是一个在编译之前运行的文本处理工具,它主要用于对源代码进行宏替换、文件包含、条件编译等操作。预处理器指令都是以 # 开头的,在真正的编译过程开始前执行。 常用的预处理指令 1. #define:定义宏 #define PI 3.14159 #define MAX(a, b) ((a) > (b) ? (a) : (b...
C++模板 C++ 的模板(Template)是一种 泛型编程机制,允许编写与类型无关的代码。模板主要分为两种: 函数模板(Function Templates) 类模板(Class Templates) 这让代码在多个类型之间重用,避免了重复实现逻辑。 函数模板 交换两个变量: template <typename T> void swapValues(...
C++智能指针 智能指针(Smart Pointer) 是 C++ 中用于自动管理动态内存的一种机制,能有效避免手动 new / delete 带来的内存泄漏、重复释放、悬挂指针等问题。 什么是智能指针 智能指针本质上是一个封装了原始指针的类模板对象,它负责: 自动释放所管理的内存; 控制对象的所有权(谁该释放); 提供与原始指针一样的操作方式(支持 *, -> ...
C++动态内存 C++ 中的动态内存是指在运行时(而不是编译时)根据程序需要分配和释放内存的机制。与静态内存(如栈上分配的变量)相比,动态内存可以提供更大的灵活性,但也更容易出错(如内存泄漏、悬挂指针等)。 堆 vs 栈 方面 栈(Stack) 堆(Heap) 分配方式 编译器...
C++内存模型 C++ 内存模型是 C++11 标准引入的重要概念,用于规定 多线程程序中变量在不同线程之间的可见性与操作顺序,使得并发程序行为可预测。它定义了原子性、可见性和有序性规则。 一、内存模型的基本概念 1. 什么是内存模型(Memory Model)? C++ 的内存模型描述了: 多线程环境下,变量的值是如何在不同线程中传播的 编译器和 CPU 可以如何重排序...
C++异常处理 C++ 的异常处理机制是通过 try、throw 和 catch 三个关键字来实现的,其设计目的是在程序发生错误时提供一种清晰的处理流程,而不是像 C 一样靠返回值或错误码。 基本语法结构 try { // 可能抛出异常的代码 ... throw 异常对象; // 抛出异常 } catch (异常类型1 变量名) { // 处理异常类型1...