《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效
《C++之旅(第3版)》[82M]百度网盘|pdf下载|亲测有效

C++之旅(第3版) pdf下载

isbn:9787121461248
出版社 电子工业出版社
出版年 2023-10-01
页数 390页
ISBN 9787121461248
装帧 精装
评分 9.2(豆瓣)
限时特惠 00:00:00
活动结束后恢复原价
纸质书参考价 ¥23
电子版限时价 ¥5.99 省 18 元

选择版本

不满意全额退款
发货失败双倍赔偿
邮箱即时发送

内容简介

本篇主要提供C++之旅(第3版)电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com

产品特色


编辑推荐

在《C++之旅》(第3版)中,Bjarne Stroustrup提供了ISO C++、C++20的概述,旨在让有经验的程序员清楚地了解现代C++的构成。这个经过修订和更新的版本,以精心制作的示例和实用的入门帮助为特色,简明扼要地说明了有效使用所需的大多数主要语言功能和标准库组件的相关知识。

Stroustrup在对应编程风格的代码中展现了相应的C++特性,例如,面向对象和泛型编程。本书内容非常全面,讲解范围从基础知识开始,广泛涵盖更高级的主题,强调更新的语言功能。此版本还包括由主要C++供应商实现的C++20中的许多新功能,如模块、概念、协程和范围,甚至引入一部分计划到C++23才收录的标准库组件。

本书的目标不是教你如何编程,也不是你掌握C++所需的唯一资源。但如果你是C或C++程序员,想更加熟悉当前的C++语言,或者是一名精通其他编程语言并希望准确了解现代C++的特性和优势的程序员,那么本书可能是你很难找到的简明精干的宝贵资料。


内容简介

《C++之旅(第3版)》一共19章,以C++20为标准,讲述了最新的现代C++所提供的编程特性。

有其他语言编程经验的读者可以从本书中快速了解C++所具备的功能,从而获得对现代C++的更全面认知,以便更好地了解现代C++语言已经发展到的程度。资深程序员可以从本书作者的整体行文风格中感受到他在设计C++特性时的一些考量及侧重点,了解C++这门语言在历史上曾经历过的变迁,以及一部分特性为什么会是今天这个样子。

所以,本书适合的读者:有其他语言编程经验,想要了解C++语言的读者;有传统C++编程经验,想要了解现代C++语言特性的读者;有较丰富编程经验且想了解C++之父在C++设计过程中的一些设计细节与思路的读者。


作者简介

Stroustrup 是 C++ 的设计者和原始实现者,也是本书及《C++程序设计原理与实践》(第2版)和《C++程序设计语言》(第4版)等领域名著的作者。他目前是哥伦比亚大学教授,之前曾在 AT&T 贝尔实验室、得克萨斯 A&M 大学和摩根士丹利工作。他曾获得无数荣誉,包括因开发和改进 C++ 编程语言所获的美国国家工程院查尔斯·斯塔克·德雷珀奖。Stroustrup 博士是美国国家工程院院士,也是 IEEE、ACM、CHM 和剑桥丘吉尔学院的院士。

译者pansz是一个经验丰富的软件工程师,从小学开始学习编程,中学时期已成为高级程序员,迄今拥有三十年以上编程经验,对包含 C++ 在内的多种主流编程语言有着长期的深入了解,并参与制定了其供职的多家企业的编程规范。


精彩书评

自诞生之初至今,C++一直在积极吸收其他编程语言中的优秀设计理念,如自动类型推导、lambda 表达式、模块和协程等。现如今,C++已广泛应用于系统开发、数据库、游戏、音视频等对性能和效率要求较高的开发领域。《C++之旅》(第3 版)一书涵盖了从C、C++98、C++11 到最新的C++20 中的主要语法特性,它既非详尽的语法教材,也非API 文档。而是由Bjarne Stroustrup 从语言设计者的角度出发,简明扼要地介绍C++的各种语言特性,并阐述其设计思想与哲学的一本书。相信无论是初学者还是经验丰富的C++开发者,都能从本书中有所收获,尤其是在对C++及现代C++的理解上。

—编程指北,知名技术自媒体

C++在计算机发展史上是一门常青藤编程语言。随着计算机软件、互联网、人工智能等技术的蓬勃发展,C++也迎来了脱胎换骨般的变化。概念、模块、范围、协程的引入让这门“古老”的编程语言持续焕发光彩,也让技术极客们可以更安全、更高效地实现更复杂的系统软件。C++就像一壶酒,历久弥香,而我们要想真正感受到它的香甜,就要了解它的历史,它的迭代过程。在本书中,Bjarne Stroustrup,C++的创造者,正是要带领我们走进C++,揭开它的面纱。而我早已迫不及待想和大家一起开启这本《C++之旅》(第3 版)了。

—程序员Carl(孙秀洋),《代码随想录》作者

C++常年保持在编程语言排行榜的前五位。作为一门强大的编程语言,它应用领域广泛,可以用于系统级的开发,也可以用于高性能计算、游戏、音视频、跨平台等很多开发领域。它所具有的灵活性和高效性使其成为许多开发者的首选。对于很多开发者来说,学习C++可能会面临较大挑战。然而,这本书对C++的讲解非常系统和有条理。从基础到进阶,介绍了C++的绝大多数核心知识点,且精炼不冗余,逐步引导读者掌握C++的各个方面。

本书将C++的核心知识点以清晰简明的方式呈现,帮助开发者建立起C++的整体框架和思维模式。值得一提的是,本书每个章节最后都有C++之父对于本章知识点的一些使用建议。这对开发者来说非常重要,能帮助开发者避免一些常见的错误和陷阱,提高代码质量和开发效率。从C++11 开始,C++标准委员会做了许多重要的改进,比如自动类型推断、智能指针、lambda 表达式等,这本书还特别强调了这些新特性和现代编程技术,可帮助开发者更方便地编写代码,并且使代码更加简洁、易读。相信大家通过学习本书,能够掌握C++的精髓,并且能够写出简洁、高效的C++代码。

—程序喵大人,知名技术自媒体

近几年,市场对C++的需求有所增长,这与人工智能的持续火爆和GPU 开发的技术改进有很大关系,这让很多非C++程序员也跃跃欲试,但是想学好这门语言并不容易。C++之父的这本书可谓生逢其时,为广大程序员量身定制了一条简易路径,让他们能快速理解C++最新版本的设计理念与核心实现,充分利用已有的编程基础与开发经验,快速跳级到实战应用的水平。艺不压身,多掌握一门重要语言,从《C++之旅》(第3 版)开始!

—程序员鱼皮,知名技术自媒体

众所周知,与C++相关的图书非常多,如天上繁星让人眼花缭乱。但如果你有其他编程语

言的基础,想要了解现代C++语言特性,那么,这本书是你不能也不应该错过的。通过阅读本书,你能了解C++之父在设计C++特性时的考量和思路,能够跟随他的脚步一起深入了解C++设计过程中的细节。

—宋浩,微信公众号“拓跋阿秀”作者

掌握C++并不是轻而易举的事情,需要时间和耐心,更需要指导和方向。这就是《C++之旅》(第3 版)这本书的价值所在。Bjarne Stroustrup,C++的创造者,以他深厚的知识和丰富的经验,为你指点迷津。他以浅显易懂的语言,详细解析了C++的核心概念和高级特性,从基础语法到面向对象编程,从STL 到模板元编程,同时你也可以从中了解从C++11 到C++20 的发展脉络,以更全面的视角,学习C++变化的过程。总之,这本书是你探索C++世界的理想向导。

—小林coding,知名技术自媒体

最近十年,C++发生了非常大的变化。遗憾的是,鲜有图书系统性地讲述这些变化。现在,C++之父Bjarne Stroustrup 博士带着他的新书来了。作为C++的创始人,他以独特的视角和深入浅出的方式为读者展现了现代C++的魅力。书中涵盖了从基础语法到现代C++特性的各个方面,如智能指针、范围、并发编程、协程等。Stroustrup 的讲解既简洁又有深度,使得复杂的概念变得易于理解。他不仅介绍了如何使用C++,更重要的是,他强调了为什么要这样使用,这种探讨使读者能够更好地理解C++的设计哲学和原则。总的来说,这本书是一本C++的精华版指南,非常适合那些想在短时间内了解C++核心概念的读者。它不仅为初学者提供了坚实的基础知识,也为有经验的程序员提供了宝贵的参考。对于每一个希望深入了解C++的人来说,本书都是一本必不可少的读物。

—轩辕之风,《趣话计算机底层技术》作者,前百度C/C++高级软件工程师

对于计算机专业的学生来讲,如果只学一门语言,我建议首选C/C++。一门语言如果封装的程度太低,会导致学不到现代编程语言的思想精髓。封装程度太高的话,又不利于对操作系统底层实现的理解。而C/C++语言封装得恰到好处,非常有利于在未来技术成长过程中达到应用和底层的融会贯通。毫无疑问,在C/C++中,最经典的著作就是C++之父Bjarne Stroustrup的《C++程序设计语言》。但由于编程语言发展得比较快,一些新技术没有被囊括进去。比如近些年在业界应用中比较流行的协程编程模型。很高兴地看到,这本《C++之旅》(第3 版)中包括了这些比较新的知识点。所以这本书值得大家拥有。

—张彦飞,《深入理解Linux 网络》作者,字节跳动性能专家工程师

由浮躁的学习风气所致,网上充满了“C/C++难学”或者劝退等言论。然而,从桌面软件到高性能服务,从金融交易系统到游戏开发领域,使用C++开发的软件默默地为我们服务着。就如同我们每天都能吃到香喷喷的大米饭,可并没有刻意去关心大米的生产过程,但这不意味着它不重要,C++之于基础软件的位置就和大米之于粮食一样。尽管C++如此重要,但新手程序员惧怕、远离学习C++,不仅是因为受到错误言论的误导,更重要的是,好的C++入门学习材料不多。如果有一本书,不需要涉及C++的方方面面,同时又能细致无遗地解释C++常用知识点,那该有多好,而《C++之旅》(第3 版)正是这样的一本书。对新手,它足够友好,结合现代C++的常用版本特点,介绍了C++入门的常用语言细节,案例翔实。如果你想将C++作为你的一个重要开发工具,那么这本《C++之旅》(第3 版)推荐给你。

—张远龙,《C++服务器开发精髓》作者


目录

第 1 章 基础

1.1 引言

1.2 程序

1.3 函数

1.4 类型、变量与运算

1.5 作用域和生命周期

1.6 常量

1.7 指针、数组和引用

1.8 检验

1.9 映射到硬件

1.10 建议

第 2 章 用户自定义类型

2.1 引言

2.2 结构

2.3 类

2.4 枚举

2.5 联合

2.6 建议

第 3 章 模块化

3.1 引言

3.2 分离编译

3.3 命名空间

3.4 函数参数与返回值

3.5 建议

第 4 章 错误处理

4.1 引言

4.2 异常

4.3 约束条件

4.4 错误处理的其他替代方式

4.5 断言

4.6 建议

第 5 章 类

5.1 引言

5.2 具体类型

5.3 抽象类型

5.4 虚函数

5.5 类层次结构

5.6 建议

第 6 章 基本操作

6.1 引言

6.2 拷贝和移动

6.3 资源管理

6.4 操作符重载

6.5 常规操作

6.6 用户自定义字面量

6.7 建议

第 7 章 模板

7.1 引言

7.2 参数化类型

7.3 参数化操作

7.4 模板机制

7.5 建议

第 8 章 概念和泛型编程

8.1 引言

8.2 概念

8.3 泛型编程

8.4 可变参数模板

8.5 模板编译模型

8.6 建议

第 9 章 标准库

9.1 引言

9.2 标准库组件

9.3 标准库的组织 ..

9.4 建议

第 10 章 字符串和正则表达式

10.1 引言

10.2 字符串

10.3 字符串视图

10.4 正则表达式

10.5 建议

第 11 章 输入和输出

11.1 引言

11.2 输出

11.3 输入

11.4 I/O 状态

11.5 用户自定义类型的 I/O

11.6 输出格式化

11.7 流

11.8 C 风格的 I/O

11.9 文件系统

11.10 建议

第 12 章 容器

12.1 引言

12.2 vector

12.3 list

12.4 forward_list

12.5 map

12.6 unordered_map

12.7 分配器

12.8 容器概述

12.9 建议

第 13 章 算法

13.1 引言

13.2 使用迭代器

13.3 迭代器类型

13.4 使用谓词

13.5 标准库算法概览

13.6 并行算法

13.7 建议

第 14 章 范围

14.1 引言

14.2 视图

14.3 生成器

14.4 管道

14.5 概念概述

14.6 建议

第 15 章 指针和容器

15.1 引言

15.2 指针类型

15.3 容器

15.4 可变类型容器

15.5 建议

第 16 章 实用工具

16.1 引言

16.2 时间

16.3 函数适配

16.4 类型函数

16.5 source_location

16.6 move()和 forward()

16.7 位操作

16.8 退出程序

16.9 建议

第 17 章 数值计算

17.1 引言

17.2 数学函数

17.3 数值计算算法

17.4 复数

17.5 随机数

17.6 向量算术

17.7 数值界限

17.8 类型别名

17.9 数学常数

17.10 建议

第 18 章 并发

18.1 引言

18.2 任务和 thread

18.3 共享数据

18.4 等待事件

18.5 任务间通信

18.6 协程

18.7 建议

第 19 章 历史和兼容性

19.1 历史

19.2 C++特性演化

19.3 C/C++兼容性

19.4 参考文献

19.5 建议

附录 A std 模块


精彩书摘

很荣幸能够为大家带来 A Tour of C++的中文翻译版。我选择翻译这本书,是因为项目组恰好开展了能使用最新版本编译器的 C++项目,我希望能够更好地了解最新版本的现代 C++,以寻求编程时可以使用的最佳实践。


在翻译过程中,我对本书的主要观点和内容有了更深入的认识。作者认为,使用 C++的程序员是要进行系统级开发的,会对性能与效率比较关注,因此在介绍各种语言特性时,本书往往会比其他编程类图书更加关注性能。这让我对 C++的设计哲学有了更深刻的理解,同时也让我更加注重代码的性能与效率。


翻译技术类图书的难点在于,一些词汇没有约定俗成的翻译,另一些词汇则存在多种不同的翻译版本。因此,在选择具体用词与统一翻译用词方面需要额外斟酌。我始终坚持要保证翻译的准确性和可读性,以确保读者能够更好地理解和掌握书中的内容。


本书中有大量代码,英文原书中的代码使用特定的颜色进行了标注,而翻译版则使用了加粗的等宽字体来表示原书中的代码,希望读者能够察觉。为了保证代码的可读性和格式的一致性,我花费了很多时间进行排版和校对。


我相信,读者一定能从本书中获益。对于有 C++98 开发经验的读者,可以从本书中获得对现代 C++ 的了解,使自己对 C++ 的理解上升到现代 C++ 的层面。而对于有其他语言编程经验的读者,可以通过本书对 C++ 语言获得基础的了解,从而进一步学习和使用 C++。


最后,我想说的是,翻译图书也同样是学习的过程,其间我自己对翻译的理解也向前迈进了一大步。果然,学而时习之,不亦说乎!

愿大家在阅读本书后能收获满满,感谢你的耐心阅读。

——译者 Pansz 2023 年 4 月 12 日


前言/序言

在你进行指示时,简短些!——西赛罗


现代 C++给人感觉像一门新的语言。我是说,相比 C++98 或 C++11 的时代,现在我能够更清晰、更简单、更直接地表达我的想法。不但如此,现代 C++生成的程序也更容易被编译器检查,而且运行得更快。


本书展示了 C++20 定义的 C++的概况,它是当前 ISO C++的标准,并且已被主流 C++提供商实现。另外,本书还提到了一些目前已经被使用的组件,但它们还没有被纳入 C++23 标准的计划。就像其他的现代编程语言一样,C++也很“大”,因为它需要大量的库来提高自身的效率。


这本薄薄的书旨在让有经验的程序员了解现代 C++是由什么构成的,它涵盖了主要的语言特性和主要的标准库组件。本书可以在一两天内读完,但要写出好的 C++代码,显然需要比读本书多得多的学习时间。然而本书的目标不是让你精通语言,而是提供概述与关键示例来帮助你着手学习。


你最好已经有一些编程经验。如果不是这样,请考虑先阅读相关的资料再继续阅读本书,推荐的资料有《C++程序设计原理与实践》(第 2 版)。即使你以前编写过程序,使用的语言及写过的程序与这里介绍的 C++风格也可能存在非常大的区别。


想象一下,在哥本哈根或者纽约等城市观光旅游。在短短几小时内,你快速地浏览了当地主要景点,聆听了一些背景故事,并获得了一些下一步该做什么的建议。但你并不能在这样简短的旅程中完全理解这座城市,也不能完全理解所见所闻,有些故事听起来可能很奇特甚至不可思议。你也不知道如何驾驭管理城市生活的规则,不管是正式的还是非正式的。要想真正理解一座城市,你必须在这个城市住上几年。然而,如果足够幸运的话,你可能会了解一些概况,对这个城市的特殊之处形成概念,并且对其中的一部分产生兴趣。在这次旅行结束之时,真正的探索才刚刚开始。


《C++之旅》介绍了 C++语言的主要特性,它们都支持面向对象和泛型编程之类的编程风格。不要指望本书会像参考手册那样,逐个特性地详细介绍语言的全貌。在最经典的教科书中,是应该在使用一个特性之前对它做出解释的,但其实很难完全做到这样,因为并不是每个人都严格按顺序阅读。我认为本书的读者在技术上已经非常成熟。因此,读者不妨对交叉引用善加利用。


同样,《C++之旅》对标准库的介绍以示例的形式点到为止,不会穷尽所有细节。读者有必要根据需要搜索额外的资料来获取技术支持。C++生态系统涵盖的范围远超 ISO 标准提供的配套工具(例如,库、构建系统、分析工具和开发环境),读者可在网上获得海量(但良莠不齐)的资料。大多数读者可以从 CppCon 和 Meeting C++等会议中发现有用的教程和简要介绍的视频。如果读者想要了解有关语言的技术细节和 ISO C++标准提供的库,我推荐Cppreference 网站。例如,当遇到一个标准库函数或类时,很容易就能在该网站查到它的定义,而且通过查阅它的文档,可以找到许多相关联的工具。


《C++之旅》呈现出来的 C++是一个集成的整体,而不是整齐地堆叠在一起的层状蛋糕。因此,具体的语言特性究竟是来自 C、C++98,还是来自更高版本的 ISO 标准,我极少做出标注。此类信息可在第 19 章中找到。我专注于基础知识并尽量保证内容简明扼要,但我并没有完全抵制住过度呈现新特性的诱惑,模块(3.2.2 节)、概念(8.2 节)和协程(18.6 节)这三节就是“例证”。我对最新进展的稍许偏爱,似乎也正好满足了许多已经了解某些旧版本 C++知识的读者的好奇心。


编程语言参考手册或标准只是简单地说明了可以做什么,但程序员通常更感兴趣的是学习如何更好地使用该语言。鉴于此,本书所涵盖的主题是精心挑选的,在文字内容上也有所体现,尤其是在建议性章节中。关于现代 C++如此优秀的原因,可以在 C++ Core Guidelines中找到更多观点。如果想进一步探索本书提出的理念,可以将 C++ Core Guidelines 视为一个很好的参考来源。你可能会注意到,C++ Core Guidelines 和本书在建议的提法及建议的编号上有着惊人的相似之处,其原因之一是,《C++之旅》的第 1 版正是 C++Core Guidelines 初版内容的主要来源。


鸣谢

感谢所有帮助完成和更正《C++之旅》早期版本的人,特别是在哥伦比亚大学参加我的“Design Using C++”课程的学生。感谢摩根士丹利给我时间编写本书。感谢 Chuck Allison、Guy Davidson、Stephen Dewhurst、Kate Gregory、Danny Kalev、Gor Nishanov 和 J.C. van Winkel 审阅本书,并提出了许多改进建议。我使用 troff 完成本书的排版,并使用了 Brain Kernighan 原创的宏。

——Bjarne Stroustrup 于纽约曼哈顿



产品特色


编辑推荐

在《C++之旅》(第3版)中,Bjarne Stroustrup提供了ISO C++、C++20的概述,旨在让有经验的程序员清楚地了解现代C++的构成。这个经过修订和更新的版本,以精心制作的示例和实用的入门帮助为特色,简明扼要地说明了有效使用所需的大多数主要语言功能和标准库组件的相关知识。

Stroustrup在对应编程风格的代码中展现了相应的C++特性,例如,面向对象和泛型编程。本书内容非常全面,讲解范围从基础知识开始,广泛涵盖更高级的主题,强调更新的语言功能。此版本还包括由主要C++供应商实现的C++20中的许多新功能,如模块、概念、协程和范围,甚至引入一部分计划到C++23才收录的标准库组件。

本书的目标不是教你如何编程,也不是你掌握C++所需的唯一资源。但如果你是C或C++程序员,想更加熟悉当前的C++语言,或者是一名精通其他编程语言并希望准确了解现代C++的特性和优势的程序员,那么本书可能是你很难找到的简明精干的宝贵资料。


内容简介

《C++之旅(第3版)》一共19章,以C++20为标准,讲述了最新的现代C++所提供的编程特性。

有其他语言编程经验的读者可以从本书中快速了解C++所具备的功能,从而获得对现代C++的更全面认知,以便更好地了解现代C++语言已经发展到的程度。资深程序员可以从本书作者的整体行文风格中感受到他在设计C++特性时的一些考量及侧重点,了解C++这门语言在历史上曾经历过的变迁,以及一部分特性为什么会是今天这个样子。

所以,本书适合的读者:有其他语言编程经验,想要了解C++语言的读者;有传统C++编程经验,想要了解现代C++语言特性的读者;有较丰富编程经验且想了解C++之父在C++设计过程中的一些设计细节与思路的读者。


作者简介

Stroustrup 是 C++ 的设计者和原始实现者,也是本书及《C++程序设计原理与实践》(第2版)和《C++程序设计语言》(第4版)等领域名著的作者。他目前是哥伦比亚大学教授,之前曾在 AT&T 贝尔实验室、得克萨斯 A&M 大学和摩根士丹利工作。他曾获得无数荣誉,包括因开发和改进 C++ 编程语言所获的美国国家工程院查尔斯·斯塔克·德雷珀奖。Stroustrup 博士是美国国家工程院院士,也是 IEEE、ACM、CHM 和剑桥丘吉尔学院的院士。

译者pansz是一个经验丰富的软件工程师,从小学开始学习编程,中学时期已成为高级程序员,迄今拥有三十年以上编程经验,对包含 C++ 在内的多种主流编程语言有着长期的深入了解,并参与制定了其供职的多家企业的编程规范。


精彩书评

自诞生之初至今,C++一直在积极吸收其他编程语言中的优秀设计理念,如自动类型推导、lambda 表达式、模块和协程等。现如今,C++已广泛应用于系统开发、数据库、游戏、音视频等对性能和效率要求较高的开发领域。《C++之旅》(第3 版)一书涵盖了从C、C++98、C++11 到最新的C++20 中的主要语法特性,它既非详尽的语法教材,也非API 文档。而是由Bjarne Stroustrup 从语言设计者的角度出发,简明扼要地介绍C++的各种语言特性,并阐述其设计思想与哲学的一本书。相信无论是初学者还是经验丰富的C++开发者,都能从本书中有所收获,尤其是在对C++及现代C++的理解上。

—编程指北,知名技术自媒体

C++在计算机发展史上是一门常青藤编程语言。随着计算机软件、互联网、人工智能等技术的蓬勃发展,C++也迎来了脱胎换骨般的变化。概念、模块、范围、协程的引入让这门“古老”的编程语言持续焕发光彩,也让技术极客们可以更安全、更高效地实现更复杂的系统软件。C++就像一壶酒,历久弥香,而我们要想真正感受到它的香甜,就要了解它的历史,它的迭代过程。在本书中,Bjarne Stroustrup,C++的创造者,正是要带领我们走进C++,揭开它的面纱。而我早已迫不及待想和大家一起开启这本《C++之旅》(第3 版)了。

—程序员Carl(孙秀洋),《代码随想录》作者

C++常年保持在编程语言排行榜的前五位。作为一门强大的编程语言,它应用领域广泛,可以用于系统级的开发,也可以用于高性能计算、游戏、音视频、跨平台等很多开发领域。它所具有的灵活性和高效性使其成为许多开发者的首选。对于很多开发者来说,学习C++可能会面临较大挑战。然而,这本书对C++的讲解非常系统和有条理。从基础到进阶,介绍了C++的绝大多数核心知识点,且精炼不冗余,逐步引导读者掌握C++的各个方面。

本书将C++的核心知识点以清晰简明的方式呈现,帮助开发者建立起C++的整体框架和思维模式。值得一提的是,本书每个章节最后都有C++之父对于本章知识点的一些使用建议。这对开发者来说非常重要,能帮助开发者避免一些常见的错误和陷阱,提高代码质量和开发效率。从C++11 开始,C++标准委员会做了许多重要的改进,比如自动类型推断、智能指针、lambda 表达式等,这本书还特别强调了这些新特性和现代编程技术,可帮助开发者更方便地编写代码,并且使代码更加简洁、易读。相信大家通过学习本书,能够掌握C++的精髓,并且能够写出简洁、高效的C++代码。

—程序喵大人,知名技术自媒体

近几年,市场对C++的需求有所增长,这与人工智能的持续火爆和GPU 开发的技术改进有很大关系,这让很多非C++程序员也跃跃欲试,但是想学好这门语言并不容易。C++之父的这本书可谓生逢其时,为广大程序员量身定制了一条简易路径,让他们能快速理解C++最新版本的设计理念与核心实现,充分利用已有的编程基础与开发经验,快速跳级到实战应用的水平。艺不压身,多掌握一门重要语言,从《C++之旅》(第3 版)开始!

—程序员鱼皮,知名技术自媒体

众所周知,与C++相关的图书非常多,如天上繁星让人眼花缭乱。但如果你有其他编程语

言的基础,想要了解现代C++语言特性,那么,这本书是你不能也不应该错过的。通过阅读本书,你能了解C++之父在设计C++特性时的考量和思路,能够跟随他的脚步一起深入了解C++设计过程中的细节。

—宋浩,微信公众号“拓跋阿秀”作者

掌握C++并不是轻而易举的事情,需要时间和耐心,更需要指导和方向。这就是《C++之旅》(第3 版)这本书的价值所在。Bjarne Stroustrup,C++的创造者,以他深厚的知识和丰富的经验,为你指点迷津。他以浅显易懂的语言,详细解析了C++的核心概念和高级特性,从基础语法到面向对象编程,从STL 到模板元编程,同时你也可以从中了解从C++11 到C++20 的发展脉络,以更全面的视角,学习C++变化的过程。总之,这本书是你探索C++世界的理想向导。

—小林coding,知名技术自媒体

最近十年,C++发生了非常大的变化。遗憾的是,鲜有图书系统性地讲述这些变化。现在,C++之父Bjarne Stroustrup 博士带着他的新书来了。作为C++的创始人,他以独特的视角和深入浅出的方式为读者展现了现代C++的魅力。书中涵盖了从基础语法到现代C++特性的各个方面,如智能指针、范围、并发编程、协程等。Stroustrup 的讲解既简洁又有深度,使得复杂的概念变得易于理解。他不仅介绍了如何使用C++,更重要的是,他强调了为什么要这样使用,这种探讨使读者能够更好地理解C++的设计哲学和原则。总的来说,这本书是一本C++的精华版指南,非常适合那些想在短时间内了解C++核心概念的读者。它不仅为初学者提供了坚实的基础知识,也为有经验的程序员提供了宝贵的参考。对于每一个希望深入了解C++的人来说,本书都是一本必不可少的读物。

—轩辕之风,《趣话计算机底层技术》作者,前百度C/C++高级软件工程师

对于计算机专业的学生来讲,如果只学一门语言,我建议首选C/C++。一门语言如果封装的程度太低,会导致学不到现代编程语言的思想精髓。封装程度太高的话,又不利于对操作系统底层实现的理解。而C/C++语言封装得恰到好处,非常有利于在未来技术成长过程中达到应用和底层的融会贯通。毫无疑问,在C/C++中,最经典的著作就是C++之父Bjarne Stroustrup的《C++程序设计语言》。但由于编程语言发展得比较快,一些新技术没有被囊括进去。比如近些年在业界应用中比较流行的协程编程模型。很高兴地看到,这本《C++之旅》(第3 版)中包括了这些比较新的知识点。所以这本书值得大家拥有。

—张彦飞,《深入理解Linux 网络》作者,字节跳动性能专家工程师

由浮躁的学习风气所致,网上充满了“C/C++难学”或者劝退等言论。然而,从桌面软件到高性能服务,从金融交易系统到游戏开发领域,使用C++开发的软件默默地为我们服务着。就如同我们每天都能吃到香喷喷的大米饭,可并没有刻意去关心大米的生产过程,但这不意味着它不重要,C++之于基础软件的位置就和大米之于粮食一样。尽管C++如此重要,但新手程序员惧怕、远离学习C++,不仅是因为受到错误言论的误导,更重要的是,好的C++入门学习材料不多。如果有一本书,不需要涉及C++的方方面面,同时又能细致无遗地解释C++常用知识点,那该有多好,而《C++之旅》(第3 版)正是这样的一本书。对新手,它足够友好,结合现代C++的常用版本特点,介绍了C++入门的常用语言细节,案例翔实。如果你想将C++作为你的一个重要开发工具,那么这本《C++之旅》(第3 版)推荐给你。

—张远龙,《C++服务器开发精髓》作者


目录

第 1 章 基础

1.1 引言

1.2 程序

1.3 函数

1.4 类型、变量与运算

1.5 作用域和生命周期

1.6 常量

1.7 指针、数组和引用

1.8 检验

1.9 映射到硬件

1.10 建议

第 2 章 用户自定义类型

2.1 引言

2.2 结构

2.3 类

2.4 枚举

2.5 联合

2.6 建议

第 3 章 模块化

3.1 引言

3.2 分离编译

3.3 命名空间

3.4 函数参数与返回值

3.5 建议

第 4 章 错误处理

4.1 引言

4.2 异常

4.3 约束条件

4.4 错误处理的其他替代方式

4.5 断言

4.6 建议

第 5 章 类

5.1 引言

5.2 具体类型

5.3 抽象类型

5.4 虚函数

5.5 类层次结构

5.6 建议

第 6 章 基本操作

6.1 引言

6.2 拷贝和移动

6.3 资源管理

6.4 操作符重载

6.5 常规操作

6.6 用户自定义字面量

6.7 建议

第 7 章 模板

7.1 引言

7.2 参数化类型

7.3 参数化操作

7.4 模板机制

7.5 建议

第 8 章 概念和泛型编程

8.1 引言

8.2 概念

8.3 泛型编程

8.4 可变参数模板

8.5 模板编译模型

8.6 建议

第 9 章 标准库

9.1 引言

9.2 标准库组件

9.3 标准库的组织 ..

9.4 建议

第 10 章 字符串和正则表达式

10.1 引言

10.2 字符串

10.3 字符串视图

10.4 正则表达式

10.5 建议

第 11 章 输入和输出

11.1 引言

11.2 输出

11.3 输入

11.4 I/O 状态

11.5 用户自定义类型的 I/O

11.6 输出格式化

11.7 流

11.8 C 风格的 I/O

11.9 文件系统

11.10 建议

第 12 章 容器

12.1 引言

12.2 vector

12.3 list

12.4 forward_list

12.5 map

12.6 unordered_map

12.7 分配器

12.8 容器概述

12.9 建议

第 13 章 算法

13.1 引言

13.2 使用迭代器

13.3 迭代器类型

13.4 使用谓词

13.5 标准库算法概览

13.6 并行算法

13.7 建议

第 14 章 范围

14.1 引言

14.2 视图

14.3 生成器

14.4 管道

14.5 概念概述

14.6 建议

第 15 章 指针和容器

15.1 引言

15.2 指针类型

15.3 容器

15.4 可变类型容器

15.5 建议

第 16 章 实用工具

16.1 引言

16.2 时间

16.3 函数适配

16.4 类型函数

16.5 source_location

16.6 move()和 forward()

16.7 位操作

16.8 退出程序

16.9 建议

第 17 章 数值计算

17.1 引言

17.2 数学函数

17.3 数值计算算法

17.4 复数

17.5 随机数

17.6 向量算术

17.7 数值界限

17.8 类型别名

17.9 数学常数

17.10 建议

第 18 章 并发

18.1 引言

18.2 任务和 thread

18.3 共享数据

18.4 等待事件

18.5 任务间通信

18.6 协程

18.7 建议

第 19 章 历史和兼容性

19.1 历史

19.2 C++特性演化

19.3 C/C++兼容性

19.4 参考文献

19.5 建议

附录 A std 模块


精彩书摘

很荣幸能够为大家带来 A Tour of C++的中文翻译版。我选择翻译这本书,是因为项目组恰好开展了能使用最新版本编译器的 C++项目,我希望能够更好地了解最新版本的现代 C++,以寻求编程时可以使用的最佳实践。


在翻译过程中,我对本书的主要观点和内容有了更深入的认识。作者认为,使用 C++的程序员是要进行系统级开发的,会对性能与效率比较关注,因此在介绍各种语言特性时,本书往往会比其他编程类图书更加关注性能。这让我对 C++的设计哲学有了更深刻的理解,同时也让我更加注重代码的性能与效率。


翻译技术类图书的难点在于,一些词汇没有约定俗成的翻译,另一些词汇则存在多种不同的翻译版本。因此,在选择具体用词与统一翻译用词方面需要额外斟酌。我始终坚持要保证翻译的准确性和可读性,以确保读者能够更好地理解和掌握书中的内容。


本书中有大量代码,英文原书中的代码使用特定的颜色进行了标注,而翻译版则使用了加粗的等宽字体来表示原书中的代码,希望读者能够察觉。为了保证代码的可读性和格式的一致性,我花费了很多时间进行排版和校对。


我相信,读者一定能从本书中获益。对于有 C++98 开发经验的读者,可以从本书中获得对现代 C++ 的了解,使自己对 C++ 的理解上升到现代 C++ 的层面。而对于有其他语言编程经验的读者,可以通过本书对 C++ 语言获得基础的了解,从而进一步学习和使用 C++。


最后,我想说的是,翻译图书也同样是学习的过程,其间我自己对翻译的理解也向前迈进了一大步。果然,学而时习之,不亦说乎!

愿大家在阅读本书后能收获满满,感谢你的耐心阅读。

——译者 Pansz 2023 年 4 月 12 日


前言/序言

在你进行指示时,简短些!——西赛罗


现代 C++给人感觉像一门新的语言。我是说,相比 C++98 或 C++11 的时代,现在我能够更清晰、更简单、更直接地表达我的想法。不但如此,现代 C++生成的程序也更容易被编译器检查,而且运行得更快。


本书展示了 C++20 定义的 C++的概况,它是当前 ISO C++的标准,并且已被主流 C++提供商实现。另外,本书还提到了一些目前已经被使用的组件,但它们还没有被纳入 C++23 标准的计划。就像其他的现代编程语言一样,C++也很“大”,因为它需要大量的库来提高自身的效率。


这本薄薄的书旨在让有经验的程序员了解现代 C++是由什么构成的,它涵盖了主要的语言特性和主要的标准库组件。本书可以在一两天内读完,但要写出好的 C++代码,显然需要比读本书多得多的学习时间。然而本书的目标不是让你精通语言,而是提供概述与关键示例来帮助你着手学习。


你最好已经有一些编程经验。如果不是这样,请考虑先阅读相关的资料再继续阅读本书,推荐的资料有《C++程序设计原理与实践》(第 2 版)。即使你以前编写过程序,使用的语言及写过的程序与这里介绍的 C++风格也可能存在非常大的区别。


想象一下,在哥本哈根或者纽约等城市观光旅游。在短短几小时内,你快速地浏览了当地主要景点,聆听了一些背景故事,并获得了一些下一步该做什么的建议。但你并不能在这样简短的旅程中完全理解这座城市,也不能完全理解所见所闻,有些故事听起来可能很奇特甚至不可思议。你也不知道如何驾驭管理城市生活的规则,不管是正式的还是非正式的。要想真正理解一座城市,你必须在这个城市住上几年。然而,如果足够幸运的话,你可能会了解一些概况,对这个城市的特殊之处形成概念,并且对其中的一部分产生兴趣。在这次旅行结束之时,真正的探索才刚刚开始。


《C++之旅》介绍了 C++语言的主要特性,它们都支持面向对象和泛型编程之类的编程风格。不要指望本书会像参考手册那样,逐个特性地详细介绍语言的全貌。在最经典的教科书中,是应该在使用一个特性之前对它做出解释的,但其实很难完全做到这样,因为并不是每个人都严格按顺序阅读。我认为本书的读者在技术上已经非常成熟。因此,读者不妨对交叉引用善加利用。


同样,《C++之旅》对标准库的介绍以示例的形式点到为止,不会穷尽所有细节。读者有必要根据需要搜索额外的资料来获取技术支持。C++生态系统涵盖的范围远超 ISO 标准提供的配套工具(例如,库、构建系统、分析工具和开发环境),读者可在网上获得海量(但良莠不齐)的资料。大多数读者可以从 CppCon 和 Meeting C++等会议中发现有用的教程和简要介绍的视频。如果读者想要了解有关语言的技术细节和 ISO C++标准提供的库,我推荐Cppreference 网站。例如,当遇到一个标准库函数或类时,很容易就能在该网站查到它的定义,而且通过查阅它的文档,可以找到许多相关联的工具。


《C++之旅》呈现出来的 C++是一个集成的整体,而不是整齐地堆叠在一起的层状蛋糕。因此,具体的语言特性究竟是来自 C、C++98,还是来自更高版本的 ISO 标准,我极少做出标注。此类信息可在第 19 章中找到。我专注于基础知识并尽量保证内容简明扼要,但我并没有完全抵制住过度呈现新特性的诱惑,模块(3.2.2 节)、概念(8.2 节)和协程(18.6 节)这三节就是“例证”。我对最新进展的稍许偏爱,似乎也正好满足了许多已经了解某些旧版本 C++知识的读者的好奇心。


编程语言参考手册或标准只是简单地说明了可以做什么,但程序员通常更感兴趣的是学习如何更好地使用该语言。鉴于此,本书所涵盖的主题是精心挑选的,在文字内容上也有所体现,尤其是在建议性章节中。关于现代 C++如此优秀的原因,可以在 C++ Core Guidelines中找到更多观点。如果想进一步探索本书提出的理念,可以将 C++ Core Guidelines 视为一个很好的参考来源。你可能会注意到,C++ Core Guidelines 和本书在建议的提法及建议的编号上有着惊人的相似之处,其原因之一是,《C++之旅》的第 1 版正是 C++Core Guidelines 初版内容的主要来源。


鸣谢

感谢所有帮助完成和更正《C++之旅》早期版本的人,特别是在哥伦比亚大学参加我的“Design Using C++”课程的学生。感谢摩根士丹利给我时间编写本书。感谢 Chuck Allison、Guy Davidson、Stephen Dewhurst、Kate Gregory、Danny Kalev、Gor Nishanov 和 J.C. van Winkel 审阅本书,并提出了许多改进建议。我使用 troff 完成本书的排版,并使用了 Brain Kernighan 原创的宏。

——Bjarne Stroustrup 于纽约曼哈顿