C++
文章平均质量分 76
slxixiha
这个作者很懒,什么都没留下…
展开
-
《Modern Effective C++》学习笔记8 微调
条款四十一:针对可复制的形参,在移动成本低期并且一定会被复制的前提下,考虑将其按值传递三种函数参数类型分析:// 途径一:针对左值和右值重载class Widget {public: void addName(const std::string& newName) { names.push_back(newName); } void addName(const std::string&& newName) { names...原创 2021-08-01 09:24:15 · 236 阅读 · 0 评论 -
《Modern Effective C++》学习笔记6 lambda表达式
条款三十一:避免默认捕获模式捕获只能针对与在创建lambda表达式的作用域内可见的非静态局部变量(包括形参),然而实测发现静态局部变量也是可以捕获的。默认按引用捕获模式的缺陷: lambda表达式的生存周期可能会大于默认捕获的局部变量或形参的生存周期,导致无效引用,而显式列出捕获对象可以起到提醒声明周期的作用,降低出错概率; 默认按值捕获模式的缺陷: 捕获裸指针时获得的只是一个裸指针副本,其他地方可能会delete这个指针,比如this指针; 按值捕获只能获得捕获当原创 2021-07-31 22:00:11 · 119 阅读 · 0 评论 -
《Modern Effective C++》学习笔记7 并发API
条款三十五:优先选用基于任务而非基于线程的程序设计基于任务?auto fut = std::async(doAsyncWork);基于线程?int doAsyncWork();std::thread t(doAsyncWork);基于线程vs基于任务 基于线程未提供获取返回值的途径,而且如果函数抛出异常,程序会终止; 基于线程的程序要求手动管理线程耗尽,超订,负载均衡以及新平台适配等种种; 基于任务拥有默认策略,能够避免以上这些问题; 基...原创 2021-07-31 21:59:05 · 109 阅读 · 0 评论 -
《Modern Effective C++》学习笔记5 右值引用,移动语义和完美转发
第五章:右值引用,移动语义和完美转发移动语义:提供了比复制操作代价低得多的移动操作,提升了代码的性能;完美转发:使得人们可以撰写接受任意实参的函数模板,并将其转发到其他函数,目标函数会接受到与转发函数所接受的完全相同的实参。条款二十三:理解std::move和std::forward这两个函数看起来是函数,其实它们在运行期间什么也不做,也不生成任何可执行代码。std::move并不进行任何移动,它只是无条件地将实参强制转换成右值。std::forward也不进行任何转发,它只是在某个原创 2021-07-27 22:53:22 · 172 阅读 · 0 评论 -
《Modern Effective C++》学习笔记4 智能指针
目前裸指针存在的问题: 无法从一个裸指针中看出指针指向的是单个对象还是对象数组; 无法了解裸指针是否唯一拥有这块内存,这影响是否需要用该指针进行析构操作; 即使需要进行析构,那么内存释放时使用free还是delete还是delete[]呢? 无法保证指针指向的内存一定会被释放,也无法保证只会被释放一次; 无法判断这个指针指向的内存是否已经释放,是否是个野指针; 条款十八:使用std::unique_ptr管理具备专属所有权的资源针对上面几个问题,st原创 2021-07-18 17:57:02 · 127 阅读 · 0 评论 -
《Modern Effective C++》学习笔记3 转向现代C++
条款七:在创建对象时注意区分()和{}大括号初始化的出现是为了进行统一初始化,实现一种从概念上可以用于一切场合的初始化,从以下例子中可以窥见:class Widget { ......private: int x{0}; // 可行 int y = 0; // 可行 int z(0); // 不可行}// 不可复制对象std::atomic<int> ai1{0}; // 可行std::atomic&l...原创 2021-07-15 20:45:22 · 159 阅读 · 0 评论 -
《Modern Effective C++》学习笔记2 auto
条款五:优先选用auto,而非显式型别声明auto的优点: 避免生成未初始化的变量; 省略冗长的变量类型的编写时间; 能够支持自动推导自己完全不知道类型的变量类型,例如lambda表达式; 方便进行代码平台切换,简化重构流程,自动转换类型; 避免由于类型不匹配导致兼容性和效率问题,例如隐式转换或者值拷贝操作产生的额外消耗; auto的缺点: auto的推导类型并不总是尽如人意,总会有些特例,参见条款二和条款六; // 例外情况{11,1..原创 2021-07-11 17:02:02 · 213 阅读 · 0 评论 -
《Modern Effective C++》学习笔记1 型别推导
条款一:理解模板型别推导背景函数模板:template <typename T>void f(ParamType param);变量:int x = 27;const int cx = x;const int& rx = x;ParamType情况分类 非万能引用的指针或引用, 此时如果expr是引用类型会忽略引用 template<typename T>void f(T& param);f(...原创 2021-07-11 16:56:29 · 122 阅读 · 0 评论 -
关于空类大小的测试
之前被问到空类的大小,今天就做了个测试,来验证一下空类的大小,测试代码如下#include <iostream>using namespace std;class empty{};class child1 : public empty{};class child2 : public empty{private: int a; };int main(...原创 2018-05-31 21:37:09 · 187 阅读 · 0 评论