发表于2024-11-05
资深C++专家、C++11布道师、金山软件资深工程师撰写
深度剖析C++11中常用新特性,从程序简洁性、性能、代码质量、内存泄露、多线程等多方面给出了代码优化的方法和建议
深入讲解了C++11在线程池开发、流行框架和库的开发、库的封装等各种工程级项目中的应用,包含大量实现源码并开源,可直接使用
在StackOverflow的最近一次世界性调查中,C++11在所有的编程语言中排名第二, C++11受到程序员的追捧是毫不意外的,因为它就像C++之父Bjarne Stroustrup说的:它看起来就像一门新的语言。C++11新增加了相当多的现代编程语言的特性,相比C++98/03,它在生产力、安全性、性能和易用性上都有了大幅提高。比如auto和decltype让我们从书写冗长的类型和繁琐的类型推断中解脱出来,智能指针让我们再也不用担心内存泄漏的问题,右值引用避免了无谓的临时对象拷贝,type_traits和可以变模板参数让我们可以更方便地写更加泛化的代码……这些还只是新增的一百多项新特性中的一小部分而已。C++14的标准在2014年的时候已经确定,而C++17标准正在制定当中,可以预见的未来,C++的发展会越来越好,C++的应用会越来越广泛,也会更受广大开发者地欢迎。
本书的内容来源于C++11项目实践,写作此书的目的是为了和广大读者分享学习和应用C++11的经验和乐趣。本书分为两篇,第一篇主要是介绍一些常用的C++11特性,介绍这些特性是如何优化C++11以前的一些代码的,读者可以从中更深刻地领悟这些新特性;第二篇主要是一些实际开发中的典型应用案例,通过这些案例读者可以看到C++11的这些新特性是如何综合运用于实际开发中的,具有实践的指导作用。相信本书会成为读者学习和应用C++11的良师益友。
资深C++专家、C++11布道师、金山软件资深工程师撰写
深度剖析C++11中常用新特性,从程序简洁性、性能、代码质量、内存泄露、多线程等多方面给出了代码优化的方法和建议
深入讲解了C++11在线程池开发、流行框架和库的开发、库的封装等各种工程级项目中的应用,包含大量实现源码并开源,可直接使用
在StackOverflow的最近一次世界性调查中,C++11在所有的编程语言中第二, C++11受到程序员的追捧是毫不意外的,因为它就像C++之父Bjarne Stroustrup说的:它看起来就像一门新的语言。C++11新增加了相当多的现代编程语言的特性,相比C++98/03,它在生产力、安全性、性能和易用性上都有了大幅提高。比如auto和decltype让我们从书写冗长的类型和繁琐的类型推断中解脱出来,智能指针让我们再也不用担心内存泄漏的问题,右值引用避免了无谓的临时对象拷贝,type_traits和可以变模板参数让我们可以更方便地写更加泛化的代码……这些还只是新增的一百多项新特性中的一小部分而已。C++14的标准在2014年的时候已经确定,而C++17标准正在制定当中,可以预见的未来,C++的发展会越来越好,C++的应用会越来越广泛,也会更受广大开发者地欢迎。
本书的内容来源于C++11项目实践,写作此书的目的是为了和广大读者分享学习和应用C++11的经验和乐趣。本书分为两篇,篇主要是介绍一些常用的C++11特性,介绍这些特性是如何优化C++11以前的一些代码的,读者可以从中更深刻地领悟这些新特性;第二篇主要是一些实际开发中的典型应用案例,通过这些案例读者可以看到C++11的这些新特性是如何综合运用于实际开发中的,具有实践的指导作用。相信本书会成为读者学习和应用C++11的良师益友。
更多精彩,点击进入品牌店查阅>>
这是C++11领域实用性和工程实践价值的著作。作者是金山软件的资深工程师,有多年一线开发经验,致力于C++11的应用和推广。C++11新特性众多,作者根据自己几年来的研究和实践,甄选出了其中最常用和实用的部分新特性,并结合代码实例讲解了如何通过这些新特性来优化既有的C++代码,这部分内容不仅能让你迅速掌握C++11,而且能充分让你领略C++11的魅力。更为重要的,作者还结合自己的企业实践和开源项目,讲解了如何利用C++11开发各种常用的工程级项目,并且所有项目的代码均开源,具有非常高的使用价值。
全书共16章,分为两个部分
部分 C++11改进我们的程序
使用类型推导、lambda、tupe元组等新特性让程序变得更简洁和更现代;
使用右值引用、move语义、emplace_back等新特性改进程序的性能;
使用可变参数模板和类型萃取等新特性消除重复和提高代码质量;
使用智能指针相关新特性解决内存泄露问题;
使用线程、互斥量、异步操作等新特性让多线程开发更简单;
……
第二部分 C++11工程实践
用C++11改进各种常用的设计模式,如单例模式、观察者模式、访问者模式,等等;
用C++11开发一个半同步半异步线程池、消息总线库和通信程序;
用C++11开发轻量级AOP库、轻量级IoC容器、轻量级的并行task库
用C++11封装SQLite库和开发linq to objects库;
……
祁 宇 资深C++技术专家,致力于C++11的应用、研究和推广。金山软件WPS资深工程师,负责Android服务端开发。精通OOP、OOD、设计模式和重构,主要研究方向为架构设计和业务重构,有丰富的开发和研发管理经验。爱好C++,爱好开源,乐于研究和分享技术,开源了多个项目,在《程序员》杂志发表多篇技术文章。
2013年被评为珠海市优秀青年人才。
前言
第一篇 C++11改进我们的程序
第1章 使用C++11让程序更简洁、更现代,
1.1 类型推导
1.1.1 auto类型推导
1.1.2 decltype关键字
1.1.3 返回类型后置语法——auto和decltype的结合使用
1.2 模板的细节改进
1.2.1 模板的右尖括号
1.2.2 模板的别名
1.2.3 函数模板的默认模板参数
1.3 列表初始化
1.3.1 统一的初始化
1.3.2 列表初始化的使用细节
1.3.3 初始化列表
1.3.4 防止类型收窄
1.4 基于范围的for循环
1.4.1 for循环的新用法
1.4.2 基于范围的 for循环的使用细节
1.4.3 让基于范围的 for循环支持自定义类型
1.5 std::function和bind绑定器
1.5.1 可调用对象
1.5.2 可调用对象包装器——std::function
1.5.3 std::bind绑定器
1.6 lambda表达式
1.6.1 lambda表达式的概念和基本用法
1.6.2 声明式的编程风格,简洁的代码
1.6.3 在需要的时间和地点实现闭包,使程序更灵活
1.7 tupe元组
1.8 总结
第2章 使用C++11改进程序性能
2.1 右值引用
2.1.1 &&的特性
2.1.2 右值引用优化性能,避免深拷贝
2.2 move语义
2.3 forward和完美转发
2.4 emplace_back减少内存拷贝和移动
2.5 unordered container无序容器
2.6 总结
第3章 使用C++11消除重复,提高代码质量
3.1 type_traits——类型萃取
3.1.1 基本的type_traits
3.1.2 根据条件选择的traits
3.1.3 获取可调用对象返回类型的traits
3.1.4 根据条件禁用或启用某种或某些类型traits
3.2 可变参数模板
3.2.1 可变参数模板函数
3.2.2 可变参数模板类
3.2.3 可变参数模板消除重复代码
3.3 可变参数模版和type_taits的综合应用
3.3.1 optional的实现
3.3.2 惰性求值类lazy的实现
3.3.3 dll帮助类
3.3.4 lambda链式调用
3.3.5 any类的实现
3.3.6 function_traits
3.3.7 variant的实现
3.3.8 ScopeGuard
3.3.9 tuple_helper
3.4 总结
第4章 使用C++11解决内存泄露的问题
4.1 shared_ptr共享的智能指针
4.1.1 shared_ptr的基本用法
4.1.2 使用shared_ptr需要注意的问题
4.2 unique_ptr独占的智能指针
4.3 weak_ptr弱引用的智能指针
4.3.1 weak_ptr基本用法
4.3.2 weak_ptr返回this指针
4.3.3 weak_ptr解决循环引用问题
4.4 通过智能指针管理第三方库分配的内存
4.5 总结
第5章 使用C++11让多线程开发变得简单
5.1 线程
5.1.1 线程的创建
5.1.2 线程的基本用法
5.2 互斥量
5.2.1 独占互斥量std::mutex
5.2.2 递归互斥量std::recursive_mutex
5.2.3 带超时的互斥量std::timed_mutex和std::recursive_timed_mutex
5.3 条件变量
5.4 原子变量
5.5 call_once/once_flag的使用
5.6 异步操作
5.6.1 获取线程函数返回值的类std::future
5.6.2 协助线程赋值的类 std::promise
5.6.3 可调用对象的包装类std::package_task
5.6.4 std::promise、std::packaged_task和std::future三者之间的关系
5.7 线程异步操作函数async
5.8 总结
第6章 使用C++11中便利的工具
6.1 处理日期和时间的chrono库
6.1.1 记录时长的duration
6.1.2 表示时间点的time point
6.1.3 获取系统时钟的clocks
6.1.4 计时器timer
6.2 数值类型和字符串的相互转换
6.3 宽窄字符转换
6.4 总结
第7章 C++11的其他特性
7.1 委托构造函数和继承构造函数
7.1.1 委托构造函数
7.1.2 继承构造函数
7.2 原始的字面量
7.3 f?inal和override关键字
7.4 内存对齐
7.4.1 内存对齐介绍
7.4.2 堆内存的内存对齐
7.4.3 利用alignas指定内存对齐大小
7.4.4 利用alignof和std::alignment_of获取内存对齐大小
7.4.5 内存对齐的类型std::aligned_storage
7.4.6 std::max_align_t和std::align操作符
7.5 C++11新增的便利算法
7.6 总结
第二篇 C++11工程级应用
第8章 使用C++11改进我们的模式
8.1 改进单例模式
8.2 改进观察者模式
8.3 改进访问者模式
8.4 改进命令模式
8.5 改进对象池模式
8.6 总结
第9章 使用C++11开发一个半同步半异步线程池
9.1 半同步半异步线程池介绍
9.2 线程池实现的关键技术分析
9.3 同步队列
9.4 线程池
9.5 应用实例
9.6 总结
第10章 使用C++11开发一个轻量级的AOP库
10.1 AOP介绍
10.2 AOP的简单实现
10.3 轻量级的AOP框架的实现
10.4 总结
第11章 使用C++11开发一个轻量级的IoC容器
11.1 IoC容器是什么
11.2 IoC创建对象
11.3 类型擦除的常用方法
11.4 通过Any和闭包来擦除类型
11.5 创建依赖的对象
11.6 完整的IoC容器
11.7 总结
第12章 使用C++11开发一个对象的消息总线库
12.1 消息总线介绍
12.2 消息总线关键技术
12.2.1 通用的消息定义
12.2.2 消息的注册
12.2.3 消息分发
12.2.4 消息总线的设计思想
12.3 完整的消息总线
12.4 应用实例
12.5 总结
第13章 使用C++11封装sqlite库
13.1 sqlite基本用法介绍
13.1.1 打开和关闭数据库的函数
13.1.2 执行SQL语句的函数
13.2 rapidjson基本用法介绍
13.2.1 解析json字符串
13.2.2 创建json对象
13.2.3 对rapidjson的一点扩展
13.3 封装sqlite的SmartDB
13.3.1 打开和关闭数据库的接口
13.3.2 Excecute接口
13.3.3 ExecuteScalar接口
13.3.4 事务接口
13.3.5 ExcecuteTuple接口
13.3.6 json接口
13.3.7 查询接口
13.4 应用实例
13.5 总结
第14章 使用C++11开发一个linq to objects库
14.1 LINQ介绍
14.1.1 LINQ语义
14.1.2 Linq标准操作符(C#)
14.2 C++中的LINQ
14.3 LINQ实现的关键技术
14.3.1 容器和数组的泛化
14.3.2 支持所有的可调用对象
14.3.3 链式调用
14.4 linq to objects的具体实现
14.4.1 一些典型LINQ操作符的实现
14.4.2 完整的linq to objects的实现
14.5 linq to objects的应用实例
14.6 总结
第15章 使用C++11开发一个轻量级的并行task库
15.1 TBB的基本用法
15.1.1 TBB概述
15.1.2 TBB并行算法
15.1.3 TBB的任务组
15.2 PPL的基本用法
15.2.1 PPL任务的链式连续执行
15.2.2 PPL的任务组
15.3 TBB和PPL的选择
15.4 轻量级的并行库TaskCpp的需求
15.5 TaskCpp的任务
15.5.1 task的实现
15.5.2 task的延续
15.6 TaskCpp任务的组合
15.6.1 TaskGroup
15.6.2 WhenAll
15.6.3 WhenAny
15.7 TaskCpp并行算法
15.7.1 ParallelForeach:并行对区间元素执行某种操作
15.7.2 ParallelInvoke:并行调用
15.7.3 ParallelReduce:并行汇聚
15.8 总结
第16章 使用C++11开发一个简单的通信程序
16.1 反应器和主动器模式介绍
16.2 asio中的Proactor
16.3 asio的基本用法
16.3.1 异步接口
16.3.2 异步发送
16.4 C++11结合asio实现一个简单的服务端程序
16.5 C++11结合asio实现一个简单的客户端程序
16.6 TCP粘包问题的解决
16.7 总结
参考文献
为什么要写这本书2011年C++11标准刚发布时,广大C++开发者奔走相告,我也在第一时间看了C++之父Bjarne,Stroustrup的C++11 FAQ(http://www.stroustrup.com/C++11FAQ.html),虽然只介绍了一部分特性,而且特性的用法介绍也很简短,但给我带来三个震撼:第一个震撼是发现我几乎不认识C++了,这么多新特性,与以前的C++很不同;第二个震撼是很多东西和其他语言类似,比如C#或者Java,感觉很酷;第三个震撼是很潮,比如lambda特性,Java都还没有(那时Java 8还没出来),C++11已经有了。我是一个喜欢研究新技术的人,一下子就被C++那么多新特性吸引住了,连续几天都在看FAQ,完全着迷了,虽然当时有很多地方没看明白,但仍然很兴奋,因为我知道这就是我想要的C++。我马上更新编译器尝鲜,学习新特性。经过一段时间的学习,在对一些主要特性有一定的了解之后,我决定在新项目中使用C++11。用C++11的感觉非常好:有了auto就不用写冗长的类型定义了,有了lambda就不用定义函数对象了,算法也用得更舒服和自然,初始化列表让容器和初始化变得很简便,还有右值引用、智能指针和线程等其他很棒的特性。C++11确实让项目的开发效率提高了很多。
相比C++98/03,C++11做了大幅度的改进,增加了相当多的现代编程语言的特性,使得C++的开发效率有了很大的提高。比如,C++11增加了右值引用,可以避免无谓的复制,从而提高程序性能;C++11增加了可变模板参数,使C++的泛型编程能力更加强大,也大幅消除了重复模板定义;C++11增加了type_traits,可以使我们很方便地在编译期对类型进行计算、查询、判断、转换和选择;C++11中增加的智能指针使我们不用担心内存泄露问题了;C++11中的线程库让我们能很方便地编写可移植的并发程序。除了这些较大的改进之外,C++11还增加了很多其他实用、便利的特性,提高了开发的便利性。对于一个用过C#的开发者来说,学习C++11一定会有一种似曾相识的感觉,比如C++11的auto、for-loop循环、lambda表达式、初始化列表、tuple等分别对应了C#中的var、for-loop循环、lambda表达式、初始化列表、tuple,这些小特性使我们编写C++程序更加简洁和顺手。C++11增加的这些特性使程序编写变得更容易、更简洁、更高效、更安全和更强大,那么我们还有什么理由不去学习这些特性并充分享受这些特性带来的好处呢?学习和使用C++11不要背着C++的历史包袱,要轻装上阵,把它当作一门新的语言来学习,才能发现它的魅力和学习的乐趣。C++11增加的新特性有一百多项,很多人质疑这会使本已复杂的C++语言变得更加复杂,从而产生一种抗拒心理,其实这是对C++11的误解,C++11并没有变得更复杂,恰恰相反,它在做简化和改进!比如auto和decltype可以用来避免写冗长的类型,bind绑定器让我们不用关注到底是用bind1st还是bind2nd了,lambda表达式让我们可以不必写大量的不易维护的函数对象等。
语言都是在不断进化之中的,只有跟上时代潮流的语言才是充满活力与魅力的语言。C++正是这样一门语言,虽然它已经有三十多年的历史了,但是它还在发展之中。C++14标准已经制定完成,C++17也提上了日程,我相信C++的未来会更加美好,C++开发者的日子也会越来越美好!
作为比较早使用C++11的开发者,我开始在项目中应用C+
华章原创精品·深入应用C++11:代码优化与工程级应用 下载 mobi epub pdf txt 电子书 格式
华章原创精品·深入应用C++11:代码优化与工程级应用 下载 mobi pdf epub txt 电子书 格式 2024
华章原创精品·深入应用C++11:代码优化与工程级应用 下载 mobi epub pdf 电子书不错不错不错不错不错
评分好不好不知道,也不懂,李先生自己买来看的~
评分买了一系列C语言书,虽然我只有几本不可以召唤神龙,虽然我只是心血来潮买了,虽然我只是个小白,但是人一定要有梦想不然和咸鱼有什么区别?我真的想去学它造一个属于自己的软件。
评分纸质不错,觉谁是正版,物流挺快,京东加油!
评分很不错哦,我喜欢,是很喜欢。
评分还不错,很多c++11应用例子,推荐购买
评分价格很实惠,一直在京东买
评分自营的,是正版书,618活动给力,自己也要给力,充电加油。
评分谁告诉你,C语言的指针,就是一个地址?
华章原创精品·深入应用C++11:代码优化与工程级应用 mobi epub pdf txt 电子书 格式下载 2024