欢迎阅读《学习C++20》中文版。本书为软件开发人员介绍前沿的计算技术,符合ISO C++标准委员会于2020年9月批准[1]的C++20标准(共1834页)。[2] C++编程语言适合构建高性能的关键业务和关键任务计算系统,包括操作系统、实时系统、嵌入式系统、游戏系统、银行系统、空中管制系统、通信系统等。本书是C++20的一个从入门到中级的教程,涵盖了C++语言本身(世界上最流行的编程语言之一[3])及其相关的标准库。我们对C++20进行了友好的、现代的、代码密集的、面向案例的介绍。

购买链接:京东 淘宝 | 美国Amazon
下载配套代码和试读PDF(1-5章和附录) ys168 网盘>> 百度网盘>> 本地下载(仅试读PDF)>>
《学习C++20》中文版特色:
- 涵盖C++20的四大特性:范围、概念、模块和协程。
- 采用“对象自然”(Objects-Natural)法:使用标准库和开源库,以最少的代码构建功能齐全的应用程序
- 数以百计来自真实世界的编码示例
- 现代C++:涵盖C++20、17、14、11,并展望了C++23
- 编译器:Visual C++®, GNU® g++, Apple Xcode® Clang, LLVM®/Clang
- Docker:GNU® GCC, LLVM®/Clang
- 基础知识:控制语句、函数、字符串、引用、指针、文件、异常
- 面向对象编程:类、对象、继承、运行时和静态多态性、操作符重载、拷贝/移动语义、RAII、智能指针
- 函数式编程:C++20的范围和视图、lambda表达式
- 泛型编程:模板、C++20概念和元编程
- C++20“模块”:大规模开发
- 并发编程:并发、多线程、并行算法、C++20协程、协程支持库、C++23执行器
- 未来:对契约的展望、基于范围的并行算法、标准库的协程支持等
本书面向的读者:
- 希望在完全覆盖、专业风格的教程中学习最新C++20特性的C++软件开发人员。
- 需要做一个C++项目,并想学习最新语言特性的非C++软件开发人员。
- 在大学里学过C++,或者在一段时间内因为职业需要使用过C++,并希望在C++20的背景下更新自己的C++知识的软件开发人员。
- 想要开发C++20课程的职业C++培训师。
[1] Herb Sutter, “C++20 Approved, C++23 Meetings and Schedule Update”,2020年9月6日。详情请访问https://herbsutter.com/2020/09/06/c20-approved-c23-meetings-and-schedule-update/。
[2] C++标准的最终草案在此:https://timsong-cpp.github.io/cppwp/n4861/,该版本免费。要购买最终发行版(ISO/IEC 14882:2020),请访问https://www.iso.org/standard/79358.html。
[3] 出自“TIOBE编程社区指数”,网址是https://www.tiobe.com/tiobe-index。
2024.3更新:第二次印刷,进行了一些勘误(见下)
2024.12更新:第三次印刷,无勘误
2025.4更新:更新了勘误,将反映在第四次印刷中。因为涉及到源代码的勘误,因此同时更新了配套代码下载。
========第一次印刷勘误========
31页,倒数第2行:将“变星”改为“变量”(感谢before80)
98页:表格第二列的首字母小写,即改为false,true等(感谢before80)
100页:表格第二列的首字母小写,改为false(感谢before80)
150页:第一段的倒数第二行:将“像平是”改为“像平时”(感谢before80)
185页:倒数第1段,第1行,将randomInt(engine)改为randomDie(engine)(感谢before80)
187页,第一段,第三行:将response.at(response)改为frequency.at(response)(感谢before80)
231页,倒数第一段:将“就不需要为sizeof使用圆括号”改为“就不必使用圆括号”(感谢before80)
96页,图4.8的代码输出,改为:(感谢before80)
1 2 3 4
Broke out of loop at count = 5
243页:第3段:删除“可以要用”./fig07_13″来运行该程序。”中的“可以”(感谢before80)
=============结束第一次印刷勘误======================
============第二次、第三次印刷勘误===================
628页倒数第11行,将“76个预定义概念”改为“74个预定义概念” (感谢陈文军)
742页倒数第7行,将std::integrity改为std::integral(感谢陈文军)
147页程序输出框最后两行,改为:(感谢陈文军)
The volume of a box with length 10
width 5 and height 2 is: 100
239页第2行,将“可以利用span的begin和end函数将span传给C++标准库算法”改为“可以为span使用begin和end函数,从而将span传给C++标准库算法”。(感谢陈文军)
255中间段,倒数第2行,将551 599改为551 615 (感谢陈文军)
258页代码第16行,将int改为size_t (感谢陈文军)
337页,中间一段第一行,将this改为first(感谢陈文军)
344页,第5段,将“聚光灯”改为“函数”(感谢陈文军)
352页,代码第9行,将setX改为modifyX (感谢陈文军)
364页,第4行,将“此是”改为“此时” (感谢陈文军)
370页,中间段,倒数第2行,将“第49行”改为“第47行”(感谢陈文军)
371页,最后一段,第2行,将“第54行”改为“第52行”(感谢陈文军)
397页,最后一段,第1行,将“指和”改为“指向”(感谢陈文军)
405页,第三段,SalariedCommission Employee应连接为完整的SalariedCommissionEmployee(感谢陈文军)
423页,第3段最后一行,将“这两个函数都重写了Employee类的”改为“这两个函数都重写了Employee类的函数”(感谢陈文军)
425页,编号4,第1行,将“或者是protected虚函数”改为“或者是protected非虚函数”(感谢陈文军)
425页,编号4,第3行,将“public虚函数”改为“public虚析构函数”(感谢陈文军)
445页,最后一行,将std::visiting改为std::visit(感谢陈文军)
449页,最后1行,将“第13”行为“第12行”(感谢陈文军)
451页,程序输出不完整,应为:
Object base1 contains: 10
Object base2 contains the character: Z
Object derived contains: int: 7; char: A; double: 3.5
Data members of Derived can be accessed individually:
int: 7
char: A
double: 3.5
Derived can be treated as an object of either base class:
base1Ptr->getData() yields 7
base2Ptr->getData() yields A
475页,第2行,将“俗艳”改为“从而”(感谢陈文军)
479页,第2段第3行,将“指针为nullptr”改为“将指针设为nullptr”(感谢陈文军)
491页,第2段第4行,将“并那里”改为“并在那里”(感谢陈文军)
509页,11.6.13节第1段第1行,将“传递操作符”改为“递减操作符”(感谢陈文军)
542页,倒数第3段,倒数第2行,将“功有助于”改为“功能有助于”(感谢陈文军)
542页,倒数第2段,第1行,将“果出现”改为“如果出现”(感谢陈文军)
547页,12.8节第1段第1行,将“1.4节展示了”改为“11.4节展示了”(感谢陈文军)
578页,倒数第3行,将“可移动构造”改为“可移动赋值”(感谢陈文军)
579页,第3段第2行,将“函数end返回指向容器末尾后的第一个元素”改为“函数end返回指向容器末尾后的第一个元素的迭代器”(感谢陈文军)
586页,第1段,第3行~第4行,将“除了array和forward_list,其他所有序列容器都支持push_back(和push_front)。”改为“除了array和vector之外的其他所有序列容器还支持push_front。”(感谢陈文军)
621页,第2段最后一句,将“希处理”改为“哈希处理”(感谢陈文军)
633页,黑点列表第一项,将“以为指定值”改为“设为指定值”(感谢陈文军)
694页,第1行第三个算法,将copy_ifPR11改为copy_ifPR11(感谢陈文军)
729页,最后一个代码片断,Number multiply…应为T multiply…(感谢陈文军)
736页,黑点列表第二条,将“第一个”改为“第二个”(感谢陈文军)
765页,15.12.2节第1段第1行,将“可参数”改为“可变参数”(感谢陈文军)
765页,15.12.2节第1段第3行,将“两种可变参数的两种方法”改为“处理可变参数的两种方法”(感谢陈文军)
799页,倒数第4行,将“码码”改为“码”(感谢陈文军)
825页,最后一行,将“以展示用户提供的这些灵活性”改为“以展示向用户提供的这些灵活性”(感谢陈文军)
860页,代码上面倒数第2行,将“如图17.1所示”改为“如图17.2所示”(感谢陈文军)
177页,代码第21行,将values.size()改为values2.size() (原书勘误)
784页,代码第16行,这一行应为:(原书勘误)
typename Iterator::iterator_category>) {
919页,第一行代码,将:
std::cout << fmt::format("Final atomicCount: {}\n", atomicCount);
改为(原书勘误):
std::cout << fmt::format("Final atomicCount: {}\n", atomicCount.load());
===========结束第二次、第三次印刷勘误=================
英文版书名:C++20 for Programmers: An Objects-Natural Approach Amazon详情页
ISBN:9780136905691
原著:Paul Deitel & Harvey Deitel
中文版书名:《学习C++20 (中文版)》 京东详情页
ISBN:9787302625438
翻译:周靖
勘误:
第243页:“在macOS和Linux上,可以要用”./fig07_13″来运行该程序。”
根据上下文,推断应该是“在macOS和Linux上,可能要用”./fig07_13″来运行该程序。”
“可以”修改成“可能”。
这7条勘误会反映在下一次印刷中(争取):sigh。
请留一个email邮箱,我跟您联系,邮寄第二次印刷的修订版。
好的,感谢您,这是我的邮箱:[email protected] 。
已回复,请查收邮件。
勘误:
第231页:“只有当类型名称(例如int)被作为操作数提供时,sizeof才需要使用圆括号。如果sizeof的操作数是一个表达式,就不需要为sizeof使用圆括号。”
根据fig07_10.cpp和fig07_11.cpp两个示例程序,可以看出:若sizeof的操作数是一个表达式,可以不用为seizeof使用圆括号。
故上述表述应该是有点歧义的,“不需要”并不表示“可以不用”的意思,同时“需要”也并不表示“必须使用”的意思。
勘误:
第222页、第232页、第233页等页面中,“内置数组”和“内建数组”混合使用。
勘误:
第187页:“关键语句是第19行,它根据response.at(response)的值来递增适当的计数器。”
根据fig06_08.cpp,应该是“关键语句是第19行,它根据frequency.at(response)的值来递增适当的计数器。”
勘误:
第185页:“调用randomInt(engine)生成一个1~6的随机索引”
根据fig06_07.cpp应该是“调用randomDie(engine)生成一个1~6的随机索引”。
勘误:
第150页: “我们没有像平是那样显示程序的输出,而是…”
“平是”应该是“平时”。
勘误:
第31页: “变星声明和大括号初始化”
应该是“变量声明和大括号初始化”。
第96页:fig04_08.cpp程序的输出结果不对,书中的结果是fig04_07.cpp程序的。
第98页和第100页:表格中的true和false的大小写混用。