
作者:(美)BjarneStroustrup(
页数:320
出版社:电子工业出版社
出版日期:2023
ISBN:9787121461248
电子书格式:pdf/epub/txt
内容简介
本书一共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++之旅》(第3版)中,Bjarne Stroustrup提供了ISO C++、C++20的概述,旨在让有经验的程序员清楚地了解现代C++的构成。这个经过修订和更新的版本,以精心制作的示例和实用的入门帮助为特色,简明扼要地说明了有效使用所需的大多数主要语言功能和标准库组件的相关知识。
Stroustrup在对应编程风格的代码中展现了相应的C++特性,例如,面向对象和泛型编程。本书内容非常全面,讲解范围从基础知识开始,广泛涵盖更高级的主题,强调更新的语言功能。此版本还包括由主要C++供应商实现的C++20中的许多新功能,如模块、概念、协程和范围,甚至引入一部分计划到C++23才收录的标准库组件。
本书的目标不是教你如何编程,也不是你掌握C++所需的唯一资源。但如果你是C或C++程序员,想更加熟悉当前的C++语言,或者是一名精通其他编程语言并希望准确了解现代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 程序 ……………………………………………………………………………………………………………….2
1.2.1 Hello, World!………………………………………………………………………………………………….. 2
1.3 函数 ……………………………………………………………………………………………………………….4
1.4 类型、变量与运算…………………………………………………………………………………………..6
1.4.1 算术运算 ……………………………………………………………………………………………………….. 7
1.4.2 初始化…………………………………………………………………………………………………………… 9
1.5 作用域和生命周期………………………………………………………………………………………… 10
1.6 常量 …………………………………………………………………………………………………………….. 11
1.7 指针、数组和引用………………………………………………………………………………………… 13
1.7.1 空指针…………………………………………………………………………………………………………..15
1.8 检验 …………………………………………………………………………………………………………….. 16
1.9 映射到硬件 ………………………………………………………………………………………………….. 19
1.9.1 赋值………………………………………………………………………………………………………………19
1.9.2 初始化…………………………………………………………………………………………………………..20
1.10 建议 …………………………………………………………………………………………………………… 21
第 2 章 用户自定义类型…………………………………………………………………………………………..23
2.1 引言 …………………………………………………………………………………………………………….. 23
2.2 结构 …………………………………………………………………………………………………………….. 24
2.3 类 ………………………………………………………………………………………………………………… 25
2.4 枚举 …………………………………………………………………………………………………………….. 27
2.5 联合 …………………………………………………………………………………………………………….. 29
2.6 建议 …………………………………………………………………………………………………………….. 31
第 3 章 模块化 ……………………………………………………………………………………………………….32
3.1 引言 …………………………………………………………………………………………………………….. 32
3.2 分离编译 ……………………………………………………………………………………………………… 33
3.2.1 头文件…………………………………………………………………………………………………………..34
3.2.2 模块………………………………………………………………………………………………………………36
3.3 命名空间 ……………………………………………………………………………………………………… 39
3.4 函数参数与返回值………………………………………………………………………………………… 41
3.4.1 参数传递 ……………………………………………………………………………………………………….42
3.4.2 返回值…………………………………………………………………………………………………………..43
3.4.3 返回类型推导 ………………………………………………………………………………………………..45
3.4.4 返回类型后置 ………………………………………………………………………………………………..45
3.4.5 结构化绑定 ……………………………………………………………………………………………………46
3.5 建议 …………………………………………………………………………………………………………….. 47
第 4 章 错误处理…………………………………………………………………………………………………….48
4.1 引言 …………………………………………………………………………………………………………….. 48
4.2 异常 …………………………………………………………………………………………………………….. 49
4.3 约束条件 ……………………………………………………………………………………………………… 50
4.4 错误处理的其他替代方式……………………………………………………………………………… 52
4.5 断言 …………………………………………………………………………………………………………….. 54
4.5.1 assert() …………………………………………………………………………………………………………..55
4.5.2 static_assert…………………………………………………………………………………………………….56
4.5.3 noexcept…………………………………………………………………………………………………………56
4.6 建议 …………………………………………………………………………………………………………….. 57
第 5 章 类………………………………………………………………………………………………………………58
5.1 引言 …………………………………………………………………………………………………………….. 58
5.1.1 类的概述 ……………………………………………………………………………………………………….59
5.2 具体类型 ……………………………………………………………………………………………………… 59
5.2.1 一种算术类型 ………………………………………………………………………………………………..60
5.2.2 容器………………………………………………………………………………………………………………62
5.2.3 容器的初始化 ………………………………………………………………………………………………..64
5.3 抽象类型 ……………………………………………………………………………………………………… 66
5.4 虚函数 …………………………………………………………………………………………………………. 69
5.5 类层次结构 ………………………………………………………………………………………………….. 70
5.5.1 类层次结构的益处 ……………………………















