本篇主要提供正版【正版全新】Effective Modern C++(中文版)+深度探索C++对象模型C语言探索电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com
Effective Modern C++(中文版) 平装 – 2018年5月20日
[美]斯科特·迈耶(Scott Meyers) (作者), 高博 (译者)
出版社: 中国电力出版社; 1版 (2018年4月30日)
平装
ISBN: 9787519817749
品牌: 中国电力出版社
涵盖以下主题:
大括号初始化、noexcept规格、转发,以及智能指针的make函数的优缺点。
std::move、std::forward、右值引用和引用之间的联系。
编写整洁、正确,以及高效的lambda表达式的方法。
std::atomic和volatile有怎样的区别,它们分别用于什么场合,以及它们和C++的并发API有何联系。
“旧”C++程序设计(即C++98)中的实战要求在现代C++的软件开发中作出哪些修订。
出版商声明 1
致谢 3
绪论 7
第1章 型别推导 15
条款1:理解模板型别推导 15
条款2:理解auto型别推导 23
条款3:理解decltype 28
条款4:掌握查看型别推导结果的方法 35
第2章 auto 41
条款5:优先选用auto,而非显式型别声明 41
条款6:当auto推导的型别不符合要求时,使用带显式型别的初始化物习惯用法 46
第3章 转向现代C++ 52
条款7:在创建对象时注意区分()和{} 52
条款8:优先选用nullptr,而非0或NULL 61
条款9:优先选用别名声明,而非typedef 64
条款10:优先选用限定作用域的枚举型别,而非不限作用域的枚举型别 68
条款11:优先选用删除函数,而非private未定义函数 74
条款12:为意在改写的函数添加override声明 79
条款13:优先选用const_iterator,而非iterator 85
条款14:只要函数不会发射异常,就为其加上noexcept声明 89
条款15:只要有可能使用constexpr,就使用它 95
条款16:保证const成员函数的线程安全性 101
条款17:理解特种成员函数的生成机制 106
第4章 智能指针 113
条款18:使用std::unique_ptr管理具备专属所有权的资源 115
条款19:使用std::shared_ptr管理具备共享所有权的资源 120
条款20:对于类似std::shared_ptr但有可能空悬的指针使用std::weak_ptr 129
条款21:优先选用std::make_unique和std::make_shared,而非直接使用new 133
条款22:使用Pimpl习惯用法时,将特殊成员函数的定义放到实现文件中 141
第5章 右值引用、移动语义和转发 150
条款23:理解std::move和std::forward 151
条款24:区分引用和右值引用 156
条款25:针对右值引用实施std::move,针对引用实施std::forward 161
条款26:避免依引用型别进行重载 169
条款27:熟悉依引用型别进行重载的替代方案 175
条款28:理解引用折叠 187
条款29:假定移动操作不存在、成本高、未使用 193
条款30:熟悉转发的失败情形 196
第6章 lambda表达式 204
条款31:避免默认捕获模式 205
条款32:使用初始化捕获将对象移入闭包 212
条款33:对auto&&型别的形参使用decltype,以std::forward之 217
条款34:优先选用lambda式,而非std::bind 220
第7章 并发API 228
条款35:优先选用基于任务而非基于线程的程序设计 228
条款36:如果异步是必要的,则指定std::launch::async 232
条款37:使std::thread型别对象在所有路径皆不可联结 236
条款38:对变化多端的线程句柄析构函数行为保持关注 243
条款39:考虑针对一次性事件通信使用以void为模板型别实参的期值 247
条款40:对并发使用std::atomic,对特种内存使用volatile 254
第8章 微调 263
条款41:针对可复制的形参,在移动成本低并且一定会被复制的前提下,考虑将
其按值传递 263
条款42:考虑置入而非插入 273
.
深度探索C++对象模型(专注C++底层机制优化代码侯捷译)C语言探索解析
目录:
本立道生(侯捷 译序)
前言(Stanley B. Lippman)
第0章 导读(译者的话)
第1章 关于对象(Object Lessons)
加上封装后的布局成本(Layout Costs for Adding Encapsulation)
1.1 C++对象模式(The C++ Object Model)
简单对象模型(A Simple Object Model)
表格驱动对象模型(A Table-driven Object Model)
C++对象模型(The C++ Object Model)
对象模型如何影响程序(How the Object Model Effects Programs)
1.2 关键词所带来的差异(A Keyword Distinction)
关键词的困扰
策略性正确的struct(The Politically Correct Struct)
1.3 对象的差异(An Object Distinction)
指针的类型(The Type of a Pointer)
加上多态之后(Adding Polymorphism)
第2章 构造函数语意学(The Semantics of Constructors)
2.1 Default Constructor的构造操作
“带有Default Constructor”的Member Class Object
“带有Default Constructor”的Base Class
“带有一个Virtual Function”的Class
“带有一个Virtual Base Class”的Class
总结
2.2 Copy Constructor的构造操作
Default Memberwise Initialization
Bitwise Copy Semantics(位逐次拷贝)
不要Bitwise Copy Semantics!
重新设定Virtual Table的指针
处理Virtual Base Class Subobject
2.3 程序转化语意学(Program Transformation Semantics)
显式的初始化操作(Explicit Initialization)
参数的初始化(Argument Initialization)
返回值的初始化(Return Value Initialization)
在使用者层面做优化(Optimization at the User Level)
在编译器层面做优化(Optimization at the Compiler Level)
Copy Constructor:要还是不要?
摘要
2.4 成员们的初始化队伍(Member Initialization List)
第3章 Data语意学(The Semantics of Data)
3.1 Data Member的绑定(The Binding of a Data Member)
3.2 Data Member的布局(Data Member Layout)
3.3 Data Member的存取
Static Data Members
Nonstatic Data Members
3.4 “继承”与Data Member
只要继承不要多态(Inheritance without Polymorphism)
加上多态(Adding Polymorphism)
多重继承(Multiple Inheritance)
虚拟继承(Virtual Inheritance)
3.5 对象成员的效率(Object Member Efficiency)
3.6 指向Data Members的指针(Pointer to Data Members)
“指向Members的指针”的效率问题
第4章 Function语意学(The Semantics of Function)
4.1 Member的各种调用方式
Nonstatic Member Functions(非静态成员函数)
Virtual Member Functions(虚拟成员函数)
Static Member Functions(静态成员函数)
4.2 Virtual Member Functions(虚拟成员函数)
多重继承下的Virtual Functions
虚拟继承下的Virtual Functions
4.3 函数的效能
4.4 指向Member Function的指针(Pointer-to-Member Functions)
支持“指向Virtual Member Functions”的指针
在多重继承之下,指向Member Functions的指针
“指向Member Functions之指针”的效率
4.5 Inline Functions
形式参数(Formal Arguments)
局部变量(Local Variables)
第5章 构造、析构、拷贝语意学(Semantics of Construction,
Destruction, and Copy)
纯虚函数的存在(Presence of a Pure Virtual Function)
虚拟规格的存在(Presence of a Virtual Specification)
虚拟规格中const的存在
重新考虑class的声明
5.1 “无继承”情况下的对象构造
抽象数据类型(Abstract Data Type)
为继承做准备
5.2 继承体系下的对象构造
虚拟继承(Virtual Inheritance)
vptr初始化语意学(The Semantics of the vptr Initialization)
5.3 对象复制语意学(Object Copy Semantics)
5.4 对象的效能(Object Efficiency)
5.5 析构语意学(Semantics of Destruction)
第6章 执行期语意学(Runtime Semantics)
6.1 对象的构造和析构(Object Construction and Destruction)
全局对象(Global Objects)
局部静态对象(Local Static Objects)
对象数组(Array of Objects)
Default Constructors和数组
6.2 new和delete运算符
针对数组的new语意
Placement Operator new的语意
6.3 临时性对象(Temporary Objects)
临时性对象的迷思(神话、传说)
第7章 站在对象模型的(On the Cusp of the Object Model)
7.1 Template
Template的“实例化”行为(Template Instantiation)
Template的报告(Error Reporting within a Template)
Template中的名称决议法(Name Resolution within a Template)
Member Function的实例化行为(Member Function Instantiation)
7.2 异常处理(Exception Handling)
Exception Handling快速检阅
对Exception Handling的支持
7.3 执行期类型识别(Runtime Type Identification,RTTI)
Type-Safe Downcast(保证安全的向下转换操作)
Type-Safe Dynamic Cast(保证安全的动态转换)
References并不是Pointers
Typeid运算符
7.4 效率有了,弹性呢?
动态共享函数库(Dynamic Shared Libraries)
共享内存(Shared Memory)