Note Of Effective C++ 、More Effective C++ And Effective Modern C++
Note Of Effective C++ 、More Effective C++ And Effective Modern C++
Effective C++ 、More Effective C++ 和 Effective Modern C++三本书的一个整合,并且加入了一些自己的想法和笔记

详细笔记请看另一个文件

Effective C++
一、让自己习惯C++ (Accustoming Yourself to C++ 11)
视C++ 为一个语言联邦 11(View C++ as a federation of languages 11)
尽量以const, enum, inline替换#defines(Prefer consts,enums, and inlines to #defines.)
尽可能使用const(Use const whenever possible.)
确定对象被使用前已先被初始化(Make sure that objects are initialized before they’re used.)
二、构造/析构/赋值运算 (Constructors, Destructors, and Assignment Operators)
了解C++ 那些自动生成和调用的函数(Know what functions C++ silently writes and calls.)

若不想使用编译器自动生成的函数,就该明确拒绝(Explicitly disallow the use of compiler-generated functions you do not want.)

为多态基类声明virtual析构函数(Declare destructors virtual in polymorphic base classes.)

别让异常逃离析构函数(Prevent exceptions from leaving destructors.)

绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruction.)

令operator= 返回一个reference to *this (Have assignment operators return a reference to *this.)

在operator= 中处理“自我赋值” (Handle assignment to self in operator=)

复制对象时勿忘其每一个成分 (Copy all parts of an object)

三、资源管理 (Resource Management)
以对象管理资源 (Use objects to manage resources)
在资源管理类中小心coping行为 (Think carefully about copying behavior in resource-managing classes)
在资源管理类中提供对原始资源的访问(Provide access to raw resources in resource-managing classes)
成对使用new和delete时要采取相同形式 (Use the same form in corresponding uses of new and delete)
以独立语句将newed对象置入智能指针 (Store newed objects in smart pointers in standalone statements)
四、设计与声明 (Designs and Declarations)
让接口容易被正确使用,不易被误用 (Make interfaces easy to use correctly and hard to use incorrectly)
设计class犹如设计type (Treat class design as type design)
以pass-by-reference-to-const替换pass-by-value (Prefer pass-by-reference-to-const to pass-by-value)
必须返回对象时,别妄想返回其reference (Don’t try to return a reference when you must return an object)
将成员变量声明为private (Declare data members private)
以non-member、non-friend替换member函数 (Prefer non-member non-friend functions to member functions)
若所有参数皆需类型转换,请为此采用non-member函数 (Declare non-member functions when type conversions should apply to all parameters)
考虑写出一个不抛异常的swap函数 (Consider support for a non-throwing swap)
五、实现 (Implementations)
尽可能延后变量定义式的出现时间 (Postpone variable definitions as long as possible)
尽量不要进行强制类型转换 (Minimize casting)
避免返回handles指向对象内部成分 (Avoid returning “handles” to object internals)
为“异常安全”而努力是值得的 (Strive for exception-safe code)
透彻了解inlining (Understand the ins and outs of inlining)
将文件间的编译依存关系降至最低 (Minimize compilation dependencies between files)
六、继承与面向对象设计 (Inheritance and Object-Oriented Design)
确定你的public继承塑模出is-a关系 (Make sure public inheritance models “is-a.”)
避免遮掩继承而来的名称 (Avoid hiding inherited names)
区分接口继承和实现继承 (Differentiate between inheritance of interface and inheritance of implementation)
考虑virtual函数以外的其他选择 (Consider alternatives to virtual functions)
绝不重新定义继承而来的non-virtual函数 (Never redefine an inherited non-virtual function)
绝不重新定义继承而来的缺省参数值 (Never redefine a function’s inherited default parameter value)
通过复合塑模出has-a或"根据某物实现出" (Model “has-a” or “is-implemented-in-terms-of” through composition)
明智而审慎地使用private继承 (Use private inheritance judiciously)
明智而审慎地使用多重继承 (Use multiple inheritance judiciously)
七、模板与泛型编程 (Templates and Generic Programming)
了解隐式接口和编译期多态 (Understand implicit interfaces and compile-time polymorphism)
了解typename的双重意义 (Understand the two meanings of typename)
学习处理模板化基类内的名称 (Know how to access names in templatized base classes)
将与参数无关的代码抽离templates (Factor parameter-independent code out of templates)
运用成员函数模板接受所有兼容类型 (Use member function templates to accept “all compatible types.”)
需要类型转换时请为模板定义非成员函数 (Define non-member functions inside templates when type conversions are desired)
请使用traits classes表现类型信息 (Use traits classes for information about types)
认识template元编程 (Be aware of template metaprogramming)
八、定制new和delete (Customizing new and delete)
了解new-handler的行为 (Understand the behavior of the new-handler)
了解new和delete的合理替换时机 (Understand when it makes sense to replace new and delete)
编写new和delete时需固守常规(Adhere to convention when writing new and delete)
写了placement new也要写placement delete(Write placement delete if you write placement new)
九、杂项讨论 (Miscellany)
不要轻忽编译器的警告(Pay attention to compiler warnings)
让自己熟悉包括TR1在内的标准程序库 (Familiarize yourself with the standard library, including TR1)
让自己熟悉Boost (Familiarize yourself with Boost)
More Effective C++
一、基础议题
区分指针和引用
优先考虑C++风格的类型转换
决不要把多态用于数组
避免不必要的默认构造函数
二、运算符
小心用户自定义的转换函数
区分自增运算符和自减运算符的前缀形式与后缀形式
不要重载"&&“、”||“和”,"
理解new和delete在不同情形下的含义
三、异常
使用析构函数防止资源泄漏
防止构造函数里的资源泄漏
阻止异常传递到析构函数以外
理解抛出异常与传递参数或者调用虚函数之间的不同
通过引用捕获异常
审慎地使用异常规格
理解异常处理所付出的代价
四、效率
记住80-20准则
考虑使用延迟计算
分期摊还预期的计算开销
了解临时对象的来源
协助编译器实现返回值优化
通过函数重载避免隐式类型转换
考虑使用op=来取代单独的op运算符
考虑使用其他等价的程序库
理解虚函数、多重继承、虚基类以及RTTI所带来的开销
五、技巧
使构造函数和非成员函数具有虚函数的行为
限制类对象的个数
要求或禁止对象分配在堆上
智能(smart)指针
引用计数
代理类
基于多个对象的虚函数
六、杂项
在将来时态下开发程序
将非尾端类设计为抽象类
理解如何在同一程序中混合使用C
让自己熟悉C++语言标准
Effective Modern C++
some note copy from EffectiveModernCppChinese

一、类型推导
理解模板类型推导
理解auto类型推导
理解decltype
学会查看类型推导结果
二、auto
优先考虑auto而非显式类型声明
auto推导若非己愿,使用显式类型初始化惯用法
三、移步现代C++
区别使用()和{}创建对象
优先考虑nullptr而非0和NULL
优先考虑别名声明而非typedefs
优先考虑限域枚举而非未限域枚举
优先考虑使用delete而非使用未定义的私有声明
使用override声明重载函数
优先考虑const_iterator而非iterator
如果函数不抛出异常请使用noexcept
尽可能的使用constexpr
确保const成员函数线程安全
理解特殊成员函数函数的生成
四、智能指针
对于占有性资源使用std::unique_ptr
对于共享性资源使用std::shared_ptr
对于类似于std::shared_ptr的指针使用std::weak_ptr可能造成悬置
优先考虑使用std::make_unique和std::make_shared而非new
当使用Pimpl惯用法,请在实现文件中定义特殊成员函数
五、右值引用,移动语意,完美转发
理解std::move和std::forward
区别通用引用和右值引用
对于右值引用使用std::move,对于通用引用使用std::forward
避免重载通用引用
熟悉重载通用引用的替代品
理解引用折叠
认识移动操作的缺点
熟悉完美转发失败的情况
六、Lambda表达式
避免使用默认捕获模式
使用初始化捕获来移动对象到闭包中
对于std::forward的auto&&形参使用decltype
有限考虑lambda表达式而非std::bind
七、并发API
优先考虑基于任务的编程而非基于线程的编程
如果有异步的必要请指定std::launch::threads
从各个方面使得std::threads unjoinable
知道不同线程句柄析构行为
考虑对于单次事件通信使用void
对于并发使用std::atomic,volatile用于特殊内存区
八、微调
对于那些可移动总是被拷贝的形参使用传值方式
考虑就地创建而非插入

Note Of Effective C++ 、More Effective C++ And Effective Modern C++相关推荐

  1. effective c++_【阅读笔记】Effective C++()

    全文参考自Effective C++, Scott Meyers 程序来自本人 https://github.com/hxz1998/ccl 1. 让自己习惯C++ C++高效编程守则视状况而变化,取 ...

  2. 卢伟冰再曝Redmi Note 8:拍照、续航、屏占比、手感都更好

    前不久,小米集团副总裁.红米Redmi品牌总经理卢伟冰宣布,红米将在近期全球首发搭载6400万像素摄像头的手机,并暗示将搭载三星传感器,随后该机的微博小尾巴已正式亮相.现在有最新消息,卢伟冰近日在微博 ...

  3. Note:理解CGI、FastCGI、PHP-CGI和PHP-FPM

    CGI CGI全称是"公共网关接口"(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行"交谈"的一种工具,其程序须 ...

  4. [note] Homebrew的介绍、安装方法与常用命令整理

    Homebrew介绍: Homebrew是Mac下一款软件包管理器(软件包管理系统:在计算机中自动安装.配置.卸载和升级软件包的工具组合),可以简化macOS上软件的安装管理过程.Homebrew C ...

  5. 不为人知的 35 个 More Effective C++ 改善编程与设计的最佳方法 | 原力计划

    作者 | fengbingchun 责编 | 屠敏 出品 | CSDN 博客 Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.E ...

  6. More Effective C++35个改善编程与设计的有效方法笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  7. Effective STL 50条有效使用STL的经验笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  8. Effective C++ -- 零散知识点整理

    Effective C++ --1让自己习惯C++ Effective C++ --2构造/析构/赋值运算 Effective C++ --3资源管理 Effective C++ --4设计与声明 E ...

  9. [读书笔记]《Effective Modern C++》—— 移步现代 C++

    文章目录 前言 item7:区别使用 () 和 {} 创建对象 item8:优先考虑使用 nullptr 而不是 0 或者 NULL item9:优先考虑别名声明而非 typedefs item10: ...

  10. Effective前端6:避免页面卡顿

    什么是页面卡顿?如下: 当拖动页面或者滚动的时候页面一卡一卡的,看起来不连贯,我们就说页面卡了,这是一种非常不友好的体验,怎么衡量页面卡顿的情况呢? 1. 失帧和帧率FPS 如果你家里买了电视盒的话, ...

最新文章

  1. 干货|一文看懂美国共享出行3大领域8大头部玩家
  2. QEMU — Guest Agent
  3. 机器学习系列(2)_从初等数学视角解读逻辑回归
  4. 机器学习数据集划分-训练集,验证集,测试集
  5. 【BZOJ 1001】[BJOI2006]狼抓兔子(最大流)
  6. dedecms在linux主机下的一个奇怪错误
  7. 05.MyBtais两种取值符号以及输入参数和输出参数
  8. 【医院综合管理专题】医院服务质量管理制度与规范
  9. 问题-提示“请确定磁盘未满或未被写保护而且文件未被使用”
  10. linux下svn命令
  11. python脚本清除linux cron中过期的定时计划
  12. msi b460m pro wifi黑苹果 efi
  13. 时钟同步服务器性能,GPS时间同步概述-GPS同步时钟的适应范围-GPS同步的优缺点-NTP服务器|同步时钟|子母钟|数显钟|GPS时间同步...
  14. 变态矿工源码、闪电鸡app等软件的应用及发展方向的个人见解
  15. 7-文件IO-阻塞与非阻塞IO
  16. d3力导向图增加节点_d3.js力导向图节点如何都显示在边框内
  17. iOS摸鱼周报 第二十四期
  18. 大规模并行处理器编程实战笔记3
  19. gb28181简单解包rtp ps流,推出rtmp(java版基于springboot):六、解包rtp ps流,推出rtmp
  20. Web 安全之内容安全策略(Content-Security-Policy,CSP)配置问题

热门文章

  1. 笔记本计算机无法上无线网络,告诉你解决笔记本电脑连不上无线网络
  2. 很哇塞的网页特效之字符串切换
  3. 程序员微信名昵称_推荐几个高逼格的微信昵称?
  4. 建筑模式语言(美)c.亚历山大.pdf,建筑模式语言(上下)(精)
  5. 安装elasticsearch遇到的几个问题
  6. 范德堡大学计算机专业课程,范德堡大学有电子电气工程专业排名
  7. 数据技术大融合,HSTAP数据库有多少想象空间?
  8. 怎么安装消息队列服务器,安装和配置消息队列(针对存档服务器)
  9. 16 医疗挂号系统_【预约下单】
  10. asp.net 视频教程