C++进阶
文章平均质量分 84
以C++11为基础,参考《深入应用C++11代码优化与工程级应用》。在常见的实际应用上引入一些C++11的新特性。内容包括程序简洁、内存泄露、多线程等方面。
Aries_Ro
go go go! That's my utopia!
展开
-
C++11的半同步半异步线程池
半同步半异步线程池用的比较多,实现也比较简单。其中同步层包括同步服务层和排队层,指的是将接收的任务排队,将所有的任务排队到一个队列中,等待处理;异步层指多个线程处理任务,异步处理层从同步层取出任务,并发处理任务。原创 2023-09-19 16:03:04 · 706 阅读 · 2 评论 -
C++11实用技术(五)泛型编程加载dll接口函数
3步看起来不多,但是如果加载上百个这样的函数,那就非常繁琐,可能会遇到重复命名、参数定义不一致等各种问题。C++11提供了方法可以通过泛型编程的方式,提供一个加载执行dll接口函数的通用函数。原创 2023-08-19 13:34:29 · 394 阅读 · 1 评论 -
C++11实用技术(四)for循环该怎么写
上述代码需要关注迭代器,也需要显示得给出容器的begin和end。不便于书写。C++11支持基于范围的for循环。如下。原创 2023-08-15 21:26:27 · 209 阅读 · 0 评论 -
线程池-手写线程池C++11版本(生产者-消费者模型)
本项目是基于C++11的线程池。使用了许多C++的新特性,包含不限于模板函数泛型编程、std::future、std::packaged_task、std::bind、std::forward完美转发、std::make_shared智能指针、decltype类型推断、std::unique_lock锁等C++11新特性功能。本项目有一定的上手难度。推荐参考系列文章。原创 2023-08-08 21:40:30 · 317 阅读 · 0 评论 -
C++标准库中的锁lock_guard、unique_lock、shared_lock、scoped_lock、recursive_mutex
std::mutex.lock是我们在C++中比较常见的锁,我们使用std::mutex.lock方法时,同时需要考虑何时使用std:mutex.unlock方法去解锁。如果在复杂的多线程情况下,加锁、解锁的时机很难把握,也不好实现。RAII原则是。C++新标准提供了lock_guard, 和四种锁,用于各种复杂情况。这四种锁都是满足RAII风格。原创 2023-05-15 22:34:55 · 5094 阅读 · 0 评论 -
右值引用以及move移动语义和forward 完美转发
最基本的解释:左值可以取地址、位于等号左边;右值没法取地址,位于等号右边。(或者函数的返回值等)struct A {a_ = a;} int a_;A a = A();其中a可以通过 & 取地址,位于等号左边,所以a是左值。A()是个临时值,没法通过 & 取地址,位于等号右边,所以A()是个右值。左右值的概念很清晰,有地址的变量就是左值,没有地址的字面值、临时值就是右值。原创 2023-06-13 00:26:37 · 279 阅读 · 0 评论 -
C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)
C++11 中,operator 是一个关键字,用于重载运算符。通过重载运算符,您可以定义自定义类型的对象在使用内置运算符时的行为。operator可以重载我们运算符“±*/=”等;还可以重载我们的函数调用运算符"operator()";还可以做类型转换运算符。原创 2023-08-05 17:41:58 · 2365 阅读 · 0 评论 -
C++11实用技术(三)std::future、std::promise、std::packaged_task、async
C++的多线程指令是thread。例如# include # include // 线程函数,打印一条消息 void printMessage(const std :: string & message) {// 创建线程对象,并指定线程函数及其参数 std :: thread t(printMessage , "Hello, world!");// 等待线程执行完毕 t . join();return 0;我们可以通过thread创建多线程。原创 2023-08-06 23:35:02 · 260 阅读 · 0 评论 -
C++11实用技术(二)std::function和bind绑定器
C++11新增了std::function和std::bind。用于函数的包装以及参数的绑定。可以替代一些函数指针回调函数的场景。原创 2023-08-05 23:58:44 · 784 阅读 · 0 评论 -
C++11实用技术(一)auto与decltype的使用
刚刚提到auto在推导变量类型时,所修饰的变量必须初始化。那不需要初始化的场景就需要使用到decltype关键字来做类型推导。这段代码编译不过,因为t,u在参数列表中,C++的返回值是前置语法,这里先推导返回值类型是找不到u,t的定义。两个关键字的用法有所不同,可以在不同场景中应用,也可以结合使用在某些场景中。auto和decltype是在编译时推导确认变量类型,所以也不会影响性能。因为编译器需要通过初始化来确定auto所代表的类型、即需要定义变量。这也是auto、decltype最常用的组合用法。原创 2023-08-05 15:51:26 · 257 阅读 · 0 评论