书籍作者:乔什·洛斯皮诺索 | ISBN:9787111734352 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:4616 |
创建日期:2024-05-03 | 发布日期:2024-05-03 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书是为中高级程序员设计的,它深入介绍了现代C++的核心。本书分为两大部分:第一部分介绍C++语言的核心,深入讲解从类型和函数到对象生命周期和表达式的所有内容;第二部分介绍C++标准库和Boost库,深入讲解所有可用的高质量、全功能的工具,涵盖了特殊的工具类、数据结构和算法,并介绍了如何操作文件系统和构建通过网络进行通信的高性能程序。本书包含500多个代码样本和近100个练习,可以让你打下坚实的C++基础,助你写出让自己引以为傲的可读性较高、短小精悍且高效的代码。
作者简介
Josh Lospinoso
一位企业家,曾在美国陆军服役15年。作为一名网络官员,他编写了几十个infosec工具,并向初级开发人员教授C++。他在各种会议上进行演讲,发表了20多篇期刊论文,并拥有一项专利。2012年,他参与创立了一家成功被收购的安全公司。他拥有自己的博客,也是开源软件的积极贡献者。他在牛津大学获统计学博士学位,是罗兹奖学金获得者。
审校者简介
Kyle Willmon
一名拥有12年C++开发经验的系统开发人员。他在信息安全社区工作了7年,利用C++、Python和Go语言完成了各种项目。Kyle目前是索尼全球威胁模拟团队的一名开发人员。
译者简介
李好 本科、硕士均毕业于华中科技大学,目前在Thoughtworks任高级咨询师,曾担任过软件工程师,拥有多年的企业级应用和架构开发经验、系统软件开发经验,以及DevOps实践经验。同时,他也有丰富的敏捷项目管理经验,熟悉各种敏捷工程实践,比如TDD、重构、极限编程等。目前专注于安全领域,涉及应用安全、基础设施安全以及操作系统安全等。
王绿菊 本科、硕士均毕业于西北大学,目前是Thoughtworks的资深咨询师,服务于安全与系统研发事业部。拥有丰富的全栈开发实战经验,精通应用安全架构与安全编码落地,同时致力于敏捷实践的布道与实践。C++编程爱好者,熟悉C++编码规范与最佳实践。
王张军 本科毕业于安徽工程大学,硕士毕业于西安邮电大学,目前是Thoughtworks安全与系统研发事业部技术负责人。曾担任某大型嵌入式设备软件研发负责人,深度参与某大型企业内部终端安全产品的设计与落地。长期从事C/C++相关的软件研发。对系统安全、系统软件研发效能有浓厚的兴趣和独到见解。目前致力于C/C++相关的遗留系统的重构和架构改善工作。
C++是软件开发中使用非常广泛的语言之一。在经验丰富的程序员眼中,C++可以写出任何程序员都会引以为傲的可读性较高、短小精悍且高效的代码。
你将通过本书学习现代C++的所有主要特性,包括:
*基本类型、引用类型和用户自定义类型;
*使用模板的编译时多态和使用虚拟类的运行时多态;
*对象生命周期,包括存储期、调用栈、内存管理、异常和RAII范式;
*高级表达式、语句和函数;
*智能指针、数据结构、日期和时间、数值工具和概率/统计工具;
*容器、迭代器、字符串和算法;
*流、文件、并发性、网络和应用程序开发。
本书包含500多个代码样本和近100个练习,可以让你打下坚实的C++基础。
系统编程的需求是巨大的。随着浏览器、移动设备和物联网应用于我们的生活,也许从来没有一个时刻像现在这样,这是人们成为一名系统程序员的最佳时机。在任何情况下我们都需要高效、可维护和正确的代码,而我坚信C++是最适合这项工作的语言。
在经验丰富的程序员手中,C++可以产生比地球上任何其他系统编程语言所能产生的更小、更高效、更可读的代码。它是一种致力于实现零开销抽象机制的语言—因此程序可以快速地被开发,同时也可以简单、直接地映射到硬件上。因此,当需要时,我们也可以进行底层控制。当用C++编程时,我们其实已经站在了巨人的肩膀上,他们花了几十年的时间精心设计了一门令人难以置信的强大而灵活的语言。
学习C++的一大好处是可以免费获得C++标准库,即stdlib。stdlib包含三个相互关联的部分:容器、迭代器和算法。如果你曾经手动编写过quicksort算法,或者曾经编写过系统代码并受到缓冲区溢出、悬空指针、使用已释放内存和重复释放内存等问题的困扰,那么你会喜欢stdlib的。它可以同时为你提供无与伦比的类型安全、正确性和效率。此外,你会为代码的紧凑和富有表现力而欣喜。
C++编程模型的核心是对象生命周期,它为正确释放程序所使用的资源(如文件、内存和网络套接字)提供了强有力的保证,即使在发生错误时。而异常,当正确使用时,可以从代码中去掉大量的错误检查。另外,移动/复制语义在管理资源所有权方面兼顾了安全性、效率和灵活性,而早期的系统编程语言(如C语言)根本没有提供这类功能。
C++是一门活跃的语言,30多年来,国际标准化组织(International Organization for Standardization,ISO)的C++委员会定期对该语言进行改进。在过去的十几年中,该标准已经发布了几个新版本,即C++11、C++14、C++17和C++20,它们分别于2011年、2014年、2017年和2020年发布。
当我使用“现代C++”(modern C++)这个术语时,指的是包含新的功能和范式的最新标准。这些更新对该语言进行了认真的改进,提高了它的表现力、效率、安全性和整体可用性。从某种程度上说,这门语言从未像现在这样流行,它也不会很快消失。如果你决定学习C++,那么你将在未来几年内得到回报。
【写作目的】
虽然现代C++程序员已经可以接触到一些质量非常高的书籍,如Scott Meyer的Effective Modern C++和Bjarne Stroustrup的The C++ Programming Language(第4版),
但它们通常是面向高级程序员的。也有一些介绍性的C++书籍,但因为它们是为初学编程的人准备的,所以往往会跳过一些关键的细节。而对于有经验的程序员来说,往往不知道去哪里学习C++。
我更喜欢有意识地学习复杂的命题,从其最基本的元素开始建立概念。C++之所以获得“C++是一门复杂的语言”的评价,是因为它的基本元素紧密地嵌套在一起,使得我们很难对这门语言有一个完整的认识。当我自己学习C++的时候,我不得不辗转于书本、视频和疲惫的同事之间,费尽心思地去弄懂这门语言。基于此,我写了这本我认为很早之前就应该有的书。
【读者对象】
本书是为已经熟悉基本编程概念的中高级程序员编写的。如果你没有专门的系统编程经验,那没关系,本书也适合有经验的应用程序员。
如果你是一名经验丰富的C语言程序员或者有抱负的系统程序员,想知道是否应该学习C++,请务必阅读“致C语言程序员”,以了解详情。
【本书内容】
本书分为两部分。第一部分讨论C++语言核心。读者不需要按时间顺序学习C++语言(即从C++98开始一直学到现代的C++11/14/17),而是可以直接学习地道的现代C++。第二部分介绍C++标准库(stdlib),在这里读者将学到最重要的基本概念。
第一部分 C++语言核心
第1章:启动和运行 本章将帮助你建立C++开发环境。你将编译和运行第一个程序,并学习如何调试它。
第2章:类型 本章将探索C++类型系统。你将了解基本类型,这是所有其他类型的基础。你也将了解普通数据类和全功能类。你还将深入了解构造函数、初始化和析构函数的作用。
第3章:引用类型 本章介绍存储其他对象的内存地址的对象。这种类型是许多重要的编程模式的基石,它能够产生灵活、高效的代码。
第4章:对象生命周期 本章在存储期的背景下继续讨论类的不变量和构造函数。同时,本章将探讨析构函数与资源获取即初始化(Resource Acquisition Is Initialization,RAII)范式。你将了解异常机制,以及它如何保证类的不变量、如何完善RAII。在了解了移动和复制语义后,你将探索如何用构造函数和赋值运算符来操作它们。
第5章:运行时多态 本章介绍接口,接口是一个允许你编写运行时的多态代码的编程概念。你将学习继承和对象组合的基础知识,这是在C++中使用接口的基础。
第6章:编译时多态 本章介绍模板,这也是一种允许你编写多态代码的语言特性。你还将探索将被添加到未来C++版本中的一个语言特性concept,以及允许你将对象从一种类型转换为另一种类型的类型转换函数。
第7章:表达式 你将深入研究操作数和运算符。在牢牢掌握类型、对象生命周期和模板之后,你将进入C++语言核心部分的学习,而表达式便是切入点。
第8章:语句 本章探讨组成函数的元素。你将学习表达式语句、复合语句、声明语句、迭代语句和跳转语句。
第9章:函数 本章讨论如何将语句变成工作单元。你将学习函数定义、返回类型、重载解析、可变参数函数、可变参数模板和函数指针等。你还将学习使用函数调用运算符和lambda表达式创建可调用的用户自定义类型的方法。你将探索std::function—一个存储可调用对象的容器类。
第二部分 C++库和框架
第10章:测试 本章介绍单元测试和模拟框架。你将练习测试驱动开发,为自动驾驶系统开发软件,同时学习一些框架,如Boost Test、Google Test、Google Mock等。
第11章:智能指针 本章介绍标准库为处理动态对象的所有权提供的特殊实用类。
第12章:工具库 本章介绍标准库和Boost库中用于处理常见编程问题的类型、类和函数。你将了解数据结构、数值函数和随机数生成器。
第13章:容器 本章介绍Boost库和标准库中的许多特殊数据结构,它们可以帮助你组织数据。你将了解顺序容器、关联容器和无序关联容器。
第14章:迭代器 迭代器是容器和字符串之间的接口。本章介绍不同类型的迭代器以及如何设计它们以便更灵活地编写程序。
第15章:字符串 本章介绍如何在单一容器中处理人类语言数据。你将了解内置于字符串中的特殊设施(facility),这些设施可以让你执行一些简单的任务。
第16章:流 本章介绍支撑输入和输出操作的主要概念。你将学习如何用格式化和非格式化的操作处理输入与输出流,以及如何使用操纵符。你还将学习如何从文件中读取数据以及如何向文件写入数据。
第17章:文件系统 本章介绍标准库中用于操作文件系统的工具。你将学习如何构建和操作路径,如何检查文件和目录,以及如何枚举目录结构。
第18章:算法 本章介绍标准库中可以轻松解决的几十个问题。你将了解这些高质量算法令人惊讶的适用范围。
第19章:并发和并行 本章介绍一些简单的多线程编程方法,这些方法是标准库的一部分。你将了解future、互斥量、条件变量和原子类型。
第20章:用Boost Asio进行网络编程 本章介绍如何构建通过网络进行通信的高性能程序。你将了解如何使用Boost Asio的阻塞式和非阻塞式输入与输出。
第21章:编写应用程序 这是本书的收尾部分,讨论了几个重要的主题。你将了解程序支持设施,这些设施可以帮助你构建更加完整的应用程序。你还将了解Boost ProgramOptions,这个库可以让你直接编写接受用户输入的控制台应用程序。