深入探索C++11核心特性
文章平均质量分 70
✔ 智能指针(unique_ptr/shared_ptr)安全内存管理
✔ 移动语义与完美转发颠覆拷贝性能瓶颈
✔ lambda表达式实现函数式编程范式
✔ constexpr编译期计算、范围for等语法糖
✔ 多线程库(thread/atomic/async)构建并发程序
本杰明玩编程
做过后端开发,Android Framework,App开发,Ai infra模型推理。
熟悉编程语言C++,Java/Kotlin,python。
现在主要做语音相关的研发工作,主要包括kws,asr,nlu,dm,tts和Ai infra大模型推理。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++11新特性之线程async
强制在新线程中异步执行。延迟执行,直到调用 get 或 wait。由实现决定是否创建新线程或延迟执行。要执行的函数。函数的参数。std::async是更高层次上的异步操作,它的存在可以使开发者不用关注线程创建内部细节,就能方便的获取异步执行状态和结果,还可以指定线程创建策略,应该用std::async替代线程的创建,让它成为做异步操作的首选。使线程的创建变得非常简单,还可以获取线程id等信息。std::mutex。原创 2024-12-14 02:36:37 · 1458 阅读 · 0 评论 -
C++11新特性之线程std::future
std::future 是 C++11 引入的标准库中的一种模板类,用于实现线程间的异步操作结果的获取。它是标准库 中的一部分,配合 std::async、std::promise 等工具使用。原创 2024-12-13 01:32:41 · 1087 阅读 · 0 评论 -
C++11新特性之线程condition_variable
std::condition_variable 是 C++ 标准库中的同步机制,用于线程间的通信和协作,主要用来让一个线程等待某个条件发生(通常是由其他线程通知)。它是基于信号量的高级封装,配合互斥锁(std::mutex)和条件标志(通常是布尔值或其他标志变量)一起使用。原创 2024-12-13 01:15:35 · 447 阅读 · 0 评论 -
C++11新特性之线程volatile
volatile关键字用于声明一个变量可能被外部事件(如硬件中断、另一个线程等)修改。通常用于嵌入式编程和多线程编程中。原创 2024-12-13 00:45:23 · 308 阅读 · 0 评论 -
C++11新特性之线程std::call_once
std::call_once 是 C++11 标准引入的一种工具,用于确保某段代码只被执行一次,通常用于实现线程安全的单例模式或初始化操作。它结合了 std::once_flag 使用。原创 2024-12-11 01:40:27 · 517 阅读 · 0 评论 -
C++11新特性之线程std::atomic
定义一个初始值为 0 的原子整型变量。原创 2024-12-11 01:30:49 · 747 阅读 · 0 评论 -
C++ 强制类型转换
强制类型转换用于转换不同数据类型之间的数据,例如从整型到浮点型,或者从基类指针到派生类指针等。原创 2024-12-11 01:17:47 · 369 阅读 · 0 评论 -
C++11新特性之线程std::lock
std::lock 是 C++ 标准库中的一个工具函数,用于同时锁定多个锁对象(通常是 std::mutex 或 std::unique_lock),以避免死锁问题。std::lock 位于头文件 中,定义如下:功能它采用了一种算法(如 层次锁排序算法),确保在锁定多个互斥量时不会发生死锁。该函数会尝试锁定提供的所有锁对象(以 不可中断的方式),直到全部成功。支持任意数量的锁,至少需要两个。std::lock参考代码以下是一个完整的代码示例,展示如何使用 std::lock 来同时锁定两个原创 2024-12-10 00:53:01 · 539 阅读 · 0 评论 -
C++11新特性之线程std::mutex
std::mutex 是 C++ 标准库提供的一种用于多线程编程的互斥量(mutex)。它定义在头文件 中,主要用于保护共享数据,防止多个线程同时访问而引发数据竞争。原创 2024-12-10 00:17:40 · 1682 阅读 · 0 评论 -
C++11新特性之线程std::thread
是C++11引入的标准库类,用于创建和管理线程。通过std::thread,程序可以并发执行多个任务,从而提高效率。原创 2024-12-09 23:57:36 · 1235 阅读 · 0 评论 -
C++ 列表初始化initializer_list
列表初始化是用花括号 {} 提供初始值来初始化变量或对象。初始化简单变量初始化结构体或类初始化标准容器(如std::vector、std::array等)统一初始化方式,取代传统的构造函数或等号赋值。原创 2024-12-09 01:37:21 · 620 阅读 · 0 评论 -
C++ 类型别名using
在C++中,using 关键字用于简化代码、减少冗余,提高代码可读性。原创 2024-12-09 01:19:33 · 744 阅读 · 0 评论 -
C++返回值优化
C++中的返回值优化(Return Value Optimization, RVO)是编译器为了提高代码运行效率而进行的一种优化技术。RVO允许编译器将临时对象的构造过程优化为直接返回该对象,而不是拷贝或移动。通过这种方式,可以减少对象的拷贝开销,从而提高程序性能。原创 2024-12-09 01:02:23 · 465 阅读 · 0 评论 -
C++移动语义move
1移动语义的核心是利用右值引用(T&&)和标准库中的std::move,使对象的资源从一个对象转移到另一个对象,而不是拷贝,从而提高程序性能。减少临时对象的开销(如函数返回大对象)。避免深拷贝(如容器中的数据转移)。使用右值引用(T&&)定义移动构造函数和移动赋值运算符。移动语义可以避免冗余的深拷贝操作,提高程序效率。使用std::move显式启用移动语义。原创 2024-12-08 23:34:18 · 1031 阅读 · 0 评论 -
C++完美转发和左值右值
这段代码主要演示了C++中值类别(左值和右值)的处理,以及std::forward和std::move在模板编程中的用法。通过PrintV函数,代码分别打印参数是左值还是右值。std::forward 用于在模板中精确传递值类别(左值或右值)。std::move 用于将变量强制转换为右值。在模板中处理值类别时,需要小心参数传递方式,确保符合预期的行为。原创 2024-12-08 22:20:00 · 909 阅读 · 0 评论 -
C++ 左值引用和右值引用的区别和联系
在这个例子中,str是一个左值,printLvalue函数接受一个左值引用参数lvalueRef,并打印出字符串内容。在这个例子中,std::move(str)将str转换为右值引用,并传递给printRvalue函数。注意,std::move并不移动数据,它只是将左值转换为右值引用,从而允许函数使用移动语义(如果函数支持的话)。直接传递字符串字面量"Temporary string"也是右值引用的一种情况。原创 2024-12-08 11:50:24 · 337 阅读 · 0 评论 -
C++11右值引用
下面是一个关于 C++11 右值引用(Rvalue References)的完整示例代码,涵盖了右值引用的基本概念、std::move、以及如何使用右值引用实现移动语义。移动构造函数:将资源(内存、数据)从临时对象转移到新对象中,并将临时对象的数据指针置空。使用 std::move 将一个右值对象的资源转移到当前对象,并释放当前对象的资源。std::move 并不真正移动对象,它只是将左值转化为右值引用,从而启用移动语义。默认构造函数:分配内存并初始化。带参数构造函数:给对象赋初值。释放动态分配的内存。原创 2024-12-08 02:16:21 · 230 阅读 · 0 评论 -
C++11智能指针
在 C++11 中,智能指针是用来管理动态分配内存的类模板,它可以避免手动管理内存中的指针,减少内存泄漏的风险。原创 2024-12-08 01:48:12 · 192 阅读 · 0 评论
分享