随笔分类 - C++
容器相关
摘要:在 Go 语言中,可变函数参数(可变长参数)和切片作为函数参数是两个不同的概念,虽然它们都能处理多个元素,但它们的用途和处理方式有所不同。以下是它们之间的详细区别: 1. 可变函数参数(Variadic Function Parameters) 可变参数函数可以接受不定数量的参数,使用 ... 运算
阅读全文
摘要:条件变量是用于线程间同步的一种机制,它允许一个或多个线程在某个条件满足之前等待,并在条件满足时通知等待的线程继续执行。以下是条件变量的基本使用方法,包括 notify_one 和 notify_all 的作用。 使用条件变量的基本步骤 创建条件变量和互斥量:首先需要创建一个 std::conditi
阅读全文
摘要:std::packaged_task 概述 std::packaged_task 是 C++11 引入的标准库模板类,用于包装一个可调用对象(如函数、lambda 表达式、函数对象等),使其能够与 std::future 协同工作。 简单来说,它将一个任务(可调用对象)包装起来,并允许你获取该任务的
阅读全文
摘要:std::future 相比于直接使用线程在 C++ 中有几个重要的优势,主要体现在同步结果获取、简化代码管理、以及更安全的异步任务管理等方面。以下是 std::future 的一些主要优势: 1. 自动结果获取与同步 std::future 提供了一种便捷的机制来获取异步任务的返回值。当我们使用线
阅读全文
摘要:在C++模板编程中,完美转发(Perfect Forwarding)是一种技术,旨在保留函数参数的值类别,即在将参数传递到另一个函数时,无论参数是左值还是右值,都能够保持它的原始性质,而不会因为转发丢失性能或引入不必要的拷贝。 完美转发的关键在于通过模板的转发引用(Forwarding Refere
阅读全文
摘要:std::unique_lock 是 C++11 标准库中的一个类,提供了一种灵活的方式来管理互斥量(mutex)。 它比 std::lock_guard 更加灵活,允许在不同的作用域和不同的锁定策略之间进行选择。以下是对 unique_lock 的详细解释,包括其用途、使用方法和优点。 1. 定义
阅读全文
摘要:std::packaged_task、std::thread 和 std::async 的区别与联系 std::packaged_task、std::thread 和 std::async 都是 C++11 中提供的并发工具,用于执行任务并处理多线程操作。虽然它们都有类似的作用(并发执行任务),但在
阅读全文
摘要:在 C++ 中,callable 类型(可调用类型)是指可以像函数一样被调用的对象 C++ 中有多种不同的可调用对象类型,它们可以通过函数调用运算符 () 被调用。 常见的 callable 类型包括: 普通函数(普通函数、静态函数、成员函数) 函数指针 仿函数(函数对象) Lambda 表达式 s
阅读全文
摘要:在 C++ 中,-> 操作符可以被重载,用于对象的指针成员访问。 重载后的 -> 操作符主要用于模拟指针访问行为,常见于智能指针的实现等复杂场景。 -> 操作符重载后的调用触发流程: 在对象上使用 -> 操作符时,编译器按照以下步骤处理: 检查对象类型是否有 operator->() 重载: 如果对
阅读全文
摘要:operator++(int) 和 operator++() 是 C++ 中重载的两个不同的自增运算符函数,它们分别用于后置自增和前置自增。它们的区别在于调用方式以及自增行为的不同。 1. 前置自增运算符 operator++(): 函数签名: Type& operator++(); 调用方式: +
阅读全文
摘要:在 C++ 中,const 关键字可以应用于成员函数,表示该函数不会修改对象的成员变量。 const 出现在 operator->() 成员函数的末尾,这意味着该成员函数在调用时不会修改对象的任何成员变量。 如下: node* operator->() const { return p; } 1.
阅读全文
摘要:初始化类成员的两种方式:(1)使用初始化列表;(2)在构造函数体内进行赋值操作。 class Point { public: Point(int xx, int yy) : x(xx), y(yy) { cout << "Constructor of Point" << endl; } privat
阅读全文
摘要:仿函数(Functor) 仿函数是通过重载()运算符的类或结构体的对象。这样一个对象可以像普通函数一样被调用。 仿函数通常用于需要在对象内部保留状态或多次调用时有特定行为的情况。 特点: 仿函数是一个类对象。 通过重载 () 运算符使得类对象像函数一样可以被调用。 可以在类中保留状态或成员变量,提供
阅读全文
摘要:1. decltype 的作用 decltype 是C++11引入的一个关键字,用来推断表达式的类型。它返回的是表达式的精确类型,包括引用和const限定符等。 例子: int x = 5; decltype(x) y = x; // y 的类型是 int 在这个例子中,decltype(x)返回
阅读全文
摘要:左值引用指向左值 右值引用指向右值 int a = 5; int &ref_a = a; // 左值引用指向左值,编译通过 int &ref_a = 5; // 左值引用指向了右值,会编译失败 int &&ref_a_right = 5; // ok int a = 5; int &&ref_a_l
阅读全文
摘要:C++ 中的 Lambda 函数 在C++11及以后版本中,Lambda函数(或称为匿名函数)是一种内联函数,可以在函数内部或任何其他地方定义,甚至可以立即传递给其他函数。 Lambda函数的语法更加灵活,允许捕获变量和处理复杂的行为,非常适合在需要简单函数的场景中使用。 语法 [capture](
阅读全文
摘要:在 C++ 中,std::string::find() 是一个用于在字符串中查找子字符串或字符的成员函数。查找成功时返回匹配的索引位置,查找失败时返回 std::string::npos,表示未找到。 std::string::find() 函数原型 std::size_t find(const s
阅读全文
摘要:std::stod 是 C++ 标准库中一个用于将字符串转换为 double 类型的函数。它属于 <string> 头文件中的函数,通常用于将包含数字的字符串转换为相应的浮点数值。 函数原型 double stod(const std::string& str, std::size_t* pos =
阅读全文
摘要:std::optional 是 C++17 中引入的一个模板类,用于表示一个值可能存在也可能不存在的情况。 它可以存储一个值,或者表示没有值的状态,类似于其他编程语言中的“可选”类型。 std::optional主要特性: 值的存在性:可以使用 has_value() 方法检查 std::optio
阅读全文
摘要:在 C++ 标准库中,std::vector 和 std::map 都支持以下比较运算符: ==(相等运算符) !=(不等运算符) <(小于运算符) <=(小于等于运算符) >(大于运算符) >=(大于等于运算符) 1. std::vector 的比较 对于 std::vector,这些运算符通过词
阅读全文