C++
南城西凛
屌丝攻城狮一枚
展开
-
C++ 限定符Const要点
基本概念 一旦一个变量用const去修饰,那么这个变量的值在接下来的程序运行过程中就不能改变。如:const int buffersize = 512;//const 整形常量初始化buffersize = 256;//错误,因为buffersize已经定义为整型常量无法修改以下是相关const用法一些小细节。 const常量初始化int i = 42;const int ci...原创 2018-09-06 10:37:55 · 123 阅读 · 0 评论 -
[Effective STL] 关联容器
理解相等(equlity)和等价(equivalence)的区别在STL中有很多这样的函数,它们需要确定两个值是否相同,但这些函数以不同的方式来判断这两个值是否相同。find对相同的定义是等价的,是以operator ==为基础,而set::insert对系统的定义是等价。因此需要了解它们之间的区别。在实际过程中,相等的概念是基于operator ==的,如果表达式x==y返回真,则x和y的值...原创 2019-06-04 21:46:45 · 165 阅读 · 0 评论 -
[Effective STL] Vector和String
使用reserve来避免不必要的重新分配关于STL容器,最了不起的一点是,它们是自动增长以便容纳下你放入其中的数据,只要没有超出它们的最大限制就可以。对于vector和string,增长过程是这样的:每当需要更多空间时,就调用与realloc类似的操作。1、分配一块大小为当前容量的某个倍数的新内存。在大多数实现中,vector和string的容量每次以2的倍数增长,即,每当容器需要扩张时,它...原创 2019-05-17 12:42:16 · 201 阅读 · 0 评论 -
[Effective STL] 容器
慎重选择容器的类型标准序列容器:vector,string,deque,list标准关联容器:set,multiset,map,multimap非标准序列容器:slist(单向链表),rope(重型string)非标准的关联容器:hash_set,hash_multiset,hash_map,hash_multimap标准的非STL容器:数组,bitset,valarray,stack,...原创 2019-05-17 11:15:42 · 156 阅读 · 0 评论 -
[Effective modern cpp] 右值引用、移动语义和完美转发
std::move 和 std::forwardNote: std::move 不进行任何移动,std::forward 也不进行任何转发,它们仅仅执行强制型别转换的函数。std::move无条件地将实参强制转换成右值,而std::forward则尽在某个特定条件满足时才执行同一个强制转换。在运行期,二者不会做任何操作。所有函数形参皆为左值。区分万能引用和右值引用1、如果函数模板形参具备T...原创 2019-05-11 21:41:53 · 231 阅读 · 0 评论 -
[Effective modern cpp]智能指针
使用std::unique_ptr管理具备专属所有权的资源1、std::unique_ptr 是只移型别。2、std::unique_ptr 默认析构通过delete实现,但可以设置自定义析构器。auto delInvmt = [](Investment* pInvestment){ makeLogEntry(pInvestment); delete pInvestment;};...原创 2019-05-08 17:33:53 · 260 阅读 · 0 评论 -
[Effective modern cpp]现代c++区别
读书笔记创建对象时使用()和{}的区别空指针优先选用nullptr,而非0或null创建对象时使用()和{}的区别1、大括号可以指定容器的初始内容>。std::vector<int> v{1,3,5}2、大括号可以用来为非静态成员指定默认初始化值,也可以用’='的初始化语法,不能用()。class Widget{ ...private: int x{0};/...原创 2019-04-27 21:15:10 · 764 阅读 · 0 评论 -
[Effective modern cpp] 并发API
笔记要点std::async与std::thread的区别std::async的启动策略使std::thread型别对象在所有返回路径皆不可联结期值析构函数行为考虑针对一次性事件通信使用以void为模板型别实参的期值条件变量配合互斥量的问题通过标志位的方式,需要不断地轮询,产生额外的资源消耗,轮询成本太高。标志位、互斥量、条件变量的方式使用std::promise型别对象和std::future型...原创 2019-03-03 15:13:02 · 213 阅读 · 0 评论 -
[Effective modern cpp] Lambda表达式
读书笔记避免使用默认捕获模式按引用捕获会导致空悬行为,如果使用,请保证引用变量的生命周期与lambda的生命周期一致。按值捕获要注意如果捕获到指针(类的this指针)也会导致空悬行为, 捕获只能在创建lambda式的作用域内可见的非静态局部变量(包括形参)。使用默认值捕获模式,不是自洽的。静态存储期对象可以在lambda内使用,但是他们不能被捕获,但如果使用了默认值捕获模式,这些对象就会给人以错觉...原创 2019-02-24 22:27:21 · 292 阅读 · 0 评论 -
[Effective modern cpp] auto关键字
优先使用auto而非类型全程原创 2019-02-23 20:56:22 · 176 阅读 · 0 评论 -
[Effective modern cpp] 第一章 类型推导
笔记要点模板类型推导(1)类型推导Param包含普通的引用或指针的情况(2)类型推导Param为万能引用的情况(3)类型推导Param为既不是引用也不是指针的情况corn case(指向const内容的const指针)corn case (数组退化、函数退化)auto类型推导decltype的理解模板类型推导模板的定义: template <typename T> func(P...原创 2019-02-23 16:38:30 · 246 阅读 · 0 评论 -
[Effective STL] 迭代器
尽量使用iterator代替const_iterator、reverse_iterator和const_reverse_iterator下面图片描述几种迭代器之间的关系:图中显示从iterator到const_iterator,从iterator到reverse_iterator和从reverse_iterator到const_reverse_iterator可以进行隐式转换。并且rever...原创 2019-06-05 00:09:10 · 167 阅读 · 0 评论