DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

随笔分类 -  c++11/14/17/20

上一页 1 2 3 下一页

摘要:在C++11中,lambda表达式有两种变量捕获方式,分别为值捕获和引用捕获。这两种捕获的形式如下: #include <iostream> int main(int argc, char* argv[]) { int i = 42; auto l1 = [i]() //值捕获 { std::cou 阅读全文
posted @ 2022-12-05 15:52 DoubleLi 阅读(849) 评论(0) 推荐(0) 编辑

摘要:在设计回调函数的时候,无可避免地会接触到可回调对象。在C++11中,提供了std::function和std::bind两个方法来对可回调对象进行统一和封装。 可调用对象 C++中有如下几种可调用对象:函数、函数指针、lambda表达式、bind对象、函数对象。其中,lambda表达式和bind对象 阅读全文
posted @ 2022-09-16 18:32 DoubleLi 阅读(703) 评论(0) 推荐(0) 编辑

摘要:std::ref只是尝试模拟引用传递,并不能真正变成引用,在非模板情况下,std::ref根本没法实现引用传递,只有模板自动推导类型时,ref能用包装类型reference_wrapper来代替原本会被识别的值类型,而reference_wrapper能隐式转换为被引用的值的引用类型。 std::r 阅读全文
posted @ 2022-09-16 18:14 DoubleLi 阅读(548) 评论(0) 推荐(0) 编辑

摘要:future和promise的作用是在不同线程之间传递数据。使用指针也可以完成数据的传递,但是指针非常危险,因为互斥量不能阻止指针的访问;而且指针的方式传递的数据是固定的,如果更改数据类型,那么还需要更改有关的接口,比较麻烦;promise支持泛型的操作,更加方便编程处理。 假设线程1需要线程2的数 阅读全文
posted @ 2022-09-16 18:09 DoubleLi 阅读(497) 评论(0) 推荐(0) 编辑

摘要:std::future介绍 在前面几篇文章中基本都用到thread对象,它是C++11中提供异步创建多线程的工具。但是我们想要从线程中返回异步任务结果,一般需要依靠全局变量;从安全角度看,有些不妥;为此C++11提供了std::future类模板,future对象提供访问异步操作结果的机制,很轻松解 阅读全文
posted @ 2022-09-16 17:52 DoubleLi 阅读(1704) 评论(0) 推荐(0) 编辑

摘要:在C++11中,lambda表达式有两种变量捕获方式,分别为值捕获和引用捕获。这两种捕获的形式如下: #include <iostream> int main(int argc, char* argv[]) { int i = 42; auto l1 = [i]() //值捕获 { std::cou 阅读全文
posted @ 2022-07-23 22:50 DoubleLi 阅读(823) 评论(0) 推荐(0) 编辑

摘要:前言 Lambda(匿名函数)表达式是C++11最重要的特性之一,lambda来源于函数式编程的概念,也是现代编程语言的一个特点。 优点如下: 声明式编程风格:就地匿名定义目标函数或函数对象,有更好的可读性和可维护性。 简洁:不需要额外写一个命名函数或函数对象,,避免了代码膨胀和功能分散。 更加灵活 阅读全文
posted @ 2022-07-22 16:50 DoubleLi 阅读(815) 评论(0) 推荐(0) 编辑

摘要:一、c++11中的智能指针数组创建 在c++11中引入了智能指针这个概念,这个非常好,但是有一个问题显然被忘记了,如何动态创建智能指针数组,在c++11中没有提供直接的函数。换句话说,创建智能指针的make_shared,不支持创建数组。那在c++11中如何创建一个智能指针数组呢?只能自己封装或者变 阅读全文
posted @ 2022-01-21 17:39 DoubleLi 阅读(815) 评论(0) 推荐(0) 编辑

摘要:一,内存 静态内存,栈内存,堆内存 ①静态内存 存储局部static对象和类的static对象以及定义在任何函数之外的变量 ②栈内存 栈内存用于保存定义在函数体内非static对象。 ③堆内存 运行需要创建时,才申请的内存空间,只有当程序结束时,才回收,也就是说我们如果不需要这个对象时,我们必须手动 阅读全文
posted @ 2022-01-21 17:36 DoubleLi 阅读(1640) 评论(0) 推荐(0) 编辑

摘要://OK, pointer to int 999 std::shared_ptr<int> sp(new int(999)); template< typename T > struct array_deleter { void operator ()( T const * p) { delete[ 阅读全文
posted @ 2022-01-21 17:33 DoubleLi 阅读(293) 评论(0) 推荐(1) 编辑

摘要:引子智能指针在帮助C++程序员管理动态内存方面可谓神兵利器,但是在有些情况下我们想要对数组进行动态内存管理就会发现一个问题 咦?shared_ptr 在默认情况下是不能指向数组的,那是为什么呢。 原因是因为我们的 shared_ptr 默认的删除器是使用 Delete 对智能指针中的对象进行删除,而 阅读全文
posted @ 2022-01-21 17:26 DoubleLi 阅读(582) 评论(0) 推荐(0) 编辑

摘要:A coroutine is a function that can suspend execution to be resumed later. 协程不是系统级线程,很多时候协程被称为“轻量级线程”、“微线程”、“纤程(fiber)”等。简单来说可以认为协程是线程里不同的函数,这些函数之间可以相互 阅读全文
posted @ 2021-12-29 15:21 DoubleLi 阅读(29012) 评论(1) 推荐(5) 编辑

摘要:1概述 C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数。相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。然而由于可变模版参数 阅读全文
posted @ 2021-03-10 14:40 DoubleLi 阅读(321) 评论(0) 推荐(0) 编辑

摘要:void func(int i, double d, const string& s) { cout << i << ", " << d << ", " << s << endl; } int main() { thread t(func, 1, 12.50, "sample"); t.join() 阅读全文
posted @ 2020-07-08 18:14 DoubleLi 阅读(2976) 评论(0) 推荐(0) 编辑

摘要:为什么要lambda函数 匿名函数是许多编程语言都支持的概念,有函数体,没有函数名。1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值。正因为有这样的需求,c++引入了lambda 函数,你可以在你的源码中内联一个lambda函数,这就使得创建快速的,一次性的函数变得简单了。例 阅读全文
posted @ 2020-06-23 12:21 DoubleLi 阅读(1907) 评论(0) 推荐(0) 编辑

摘要:在开发网络应用程序时,各个模块之间的数据通信可谓是家常便饭,为了应对这些数据通信时数据交换的要求,程序员发明了各种数据格式:采用二进制数据结构(早期 C 程序员)、采用 XML、采用SOAP(坑人的设计)、采用 URL 编码、采用JSON格式等。客户端与服务端交互时采用这些数据格式进行数据交换时,必 阅读全文
posted @ 2017-12-29 11:41 DoubleLi 阅读(2005) 评论(0) 推荐(0) 编辑

摘要:闲来无事发现了一个基于C++实现的序列化工具,相比于其他(比如Boost serialization或Google protobuf,恰巧都用过,以后再介绍),使用简单,感觉不错,下面做个摸索。 cereal介绍 cereal是一个开源的(BSD License)、轻量级的、支持C++11特性的、仅 阅读全文
posted @ 2017-12-29 11:37 DoubleLi 阅读(3963) 评论(0) 推荐(0) 编辑

摘要:前段时间刚试用了一个序列化工具cereal,请看cereal:C++实现的开源序列化库,打算再总结下我对google proto buf序列化库的使用呢, 结果还没动手,大Google又出了一个新的、开源、跨平台的序列化工具:FlatBuffers。那就索性先了解了解这个工具把。 一. 什么是Goo 阅读全文
posted @ 2017-12-29 11:36 DoubleLi 阅读(1333) 评论(0) 推荐(0) 编辑

摘要:@[tools|flatbuffers|opensource] 概述### Google在今年6月份发布了跨平台序列化工具FlatBuffers,提供了C++/Java/Go/C#接口支持,这是一个注重性能和资源使用的序列化类库。相较于Protocol Buffers,其更适用于移动设备,FlatB 阅读全文
posted @ 2017-12-29 11:35 DoubleLi 阅读(3233) 评论(0) 推荐(0) 编辑

摘要:所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更 阅读全文
posted @ 2017-11-24 14:35 DoubleLi 阅读(947) 评论(0) 推荐(0) 编辑

上一页 1 2 3 下一页
点击右上角即可分享
微信分享提示