首页 > 图书中心 >图书详情

C++20高级编程(第5版)

历史性的C++20来了,四大新特性:概念、范围库、协程和模块。代表了C++ 30年来的标准化和诞生40年来的强大生命力。随书赠送在线资源,获取地址见书封底二维码。

作者:[比]马克·格雷戈勒(Marc Gregoire) 著 程序喵大人 惠惠 墨梵 译
定价:228
印次:1-6
ISBN:9787302602132
出版日期:2022.04.01
印刷日期:2023.10.18

主要内容 ● 演示如何用C++思考,以**限度地发挥语言的深远能力,并开发有效的解决方案 ● 解释难以理解的原理,进行陷阱警告,分享提高效率和性能的提示、技巧和变通方法 ● 呈现各种具有挑战性的、真实世界的程序,其用途广泛,足以融入任何项目 ● 重点介绍C++20的新特性,包括模块、概念、三向比较、立即执行函数等 ● 深入讨论新的C++20标准库功能,例如文本格式化、范围、原子智能指针、同步原语、日期、时区等

more >

前 言 作为带有类的C的继承者,丹麦计算机科学家Bjarne Stroustrup于1982年发明了C++。1985年,发布了第一版的“C++程序设计语言”。第一个标准化版本的C++在1998年发布,称为C++98。在2003年,C++03发布并包含了一些小的更新。在那之后,C++沉默了一段时间,但吸引力开始慢慢增强,导致该语言在2011年进行了重大更新,称为C++11。从那以后,C++标准委员会以3年的周期发布更新的版本,出现了C++14、C++17以及现在的C++20。总之,2020年发布了C++20之后,C++已经将近40年了,并且仍然很强大。在2020年的大多数编程语言排名中,C++都排在前四位。它被广泛用于各种硬件,从带有嵌入式微处理器的小型设备一直到超级计算机。除了广泛的硬件支持,C++还可以用来解决几乎任何编程工作,如移动平台上的游戏、对性能要求严格的人工智能(AI)和机器学习(ML)软件、实时三维图形引擎、底层硬件驱动程序、整个操作系统等。C++程序很难与任何其他编程语言相匹配,因此,多年来,C++都是编写性能卓越、功能强大的企业级面向对象程序的事实标准语言。尽管C++语言已经风靡全球,但这种语言却难以完全掌握。专业C++程序员使用一些简单但高效的技术,这些技术并未出现在传统教材中;即使是经验丰富的C++程序员,也未必完全了解C++中某些很有用的特性。 编程书籍往往重点描述语言的语法,而不是语言在真实世界中的应用。典型的C++教材在每一章中介绍语言中的大部分知识,讲解语法并列举示例。《C++20高级编程(第5版) 》不遵循这种模式。《C++20高级编程(第5版) 》并不讲解语言的大量细节并给出少量真实世界的场景,而是教你如何在真实世界中使用C++。《C++20高级编程(第5版) 》还会讲解一些鲜为人知的让编程更简单的特性,以及区分编程新手和专业程序员的编程技术。 读者对象 就算使用C++已经多年,你也仍可能不熟悉C++的一些高级特性,或仍不具有使用这门语言的完整能力。也许你编写过实用的C++代码,但还想学习更多有关C++中设计和良好编程风格的内容。也许你是C++新手,想在入门时就掌握“正确”的编程方式。《C++20高级编程(第5版) 》能满足上述需求,将你的C++技能提升到专业水准。 因为《C++20高级编程(第5版) 》专注于将你从对C++具有基本或中等了解水平蜕变为一名专业C++程序员,所以《C++20高级编程(第5版) 》假设你对该语言具有一定程度的认识。第1章涵盖C++的一些基础知识,可以当成复习材料,但是不能替代实际的语言培训和语言使用手册。如果你刚开始接触C++,但有很丰富的C、Java或C#语言经验,那么应该能从第1章获得所需的大部分知识。 不管属于哪种情况,都应该具有很好的编程基础。应该知道循环、函数和变量。应该知道如何组织一个程序,而且应该熟悉基本技术,例如递归。应该了解一些常见的数据结构(例如队列)以及有用的算法(例如排序和搜索)。不需要预先了解有关面向对象编程的知识—— 这是第5章讲解的内容。 你还应该熟悉开发代码时使用的编译器。稍后将简要介绍Microsoft Visual C++和GCC这两种编译器。要了解其他编译器,请参阅编译器自带的指南。 《C++20高级编程(第5版) 》主要内容 阅读《C++20高级编程(第5版) 》是学习C++语言的一种方法,通过阅读《C++20高级编程(第5版) 》既能提升编码质量,又能提升编程效率。《C++20高级编程(第5版) 》贯穿对C++20新特性的讨论。这些新的C++特性并不是独立在某几章中,而是穿插于全书,在有必要的情况下,所有例子都已更新为使用这些新特性。 《C++20高级编程(第5版) 》不仅讲解C++语法和语言特性,还强调编程方法论、可重用的设计模式以及良好的编程风格。《C++20高级编程(第5版) 》讲解的方法论覆盖整个软件开发过程——从设计和编码,到调试以及团队协作。这种方法可让你掌握C++语言及其独有特性,还能在大型软件开发中充分利用C++语言的强大功能。 想象一下有人学习了C++的所有语法但没有见过一个C++例子的情形。他所了解的知识会让他处于非常危险的境地。如果没有示例的引导,他可能会认为所有源代码都要放在程序的main()函数中,还有可能认为所有变量都应该为全局变量—— 这些都不是良好的编程实践。 专业的C++程序员除了理解语法外,还要正确理解语言的使用方式。他们知道良好设计的重要性、面向对象编程的理论以及使用现有库的最佳方式。他们还开发了大量有用的代码并了解可重用的思想。 通过阅读和理解《C++20高级编程(第5版) 》的内容,你也能成为一名专业的C++程序员。你在C++方面的知识会得到扩充,将接触到鲜为人知和常被误解的语言特性。你还将领略面向对象设计,掌握卓越的调试技能。最重要的或许是,通过阅读《C++20高级编程(第5版) 》,你的头脑中有了大量“可重用”思想,可将这些思想贯彻到日常工作中。 有很多好的理由让你努力成为一名专业的C++程序员,而非只是泛泛了解C++。了解语言的真正工作原理有助于提升代码质量。了解不同的编程方法论和过程可让你更好地和团队协作。探索可重用的库和常用的设计模式可提升日常工作效率,并帮助你避免白费力气的重复工作。所有这些学习课程都在帮助你成为更优秀的程序员,同时成为更有价值的雇员。 《C++20高级编程(第5版) 》结构 《C++20高级编程(第5版) 》包括5部分。 第I部分“专业的C++简介”是C++基础速成教程,能确保读者掌握C++的基础知识。在速成教程后,这部分深入讨论字符串和字符串视图的使用,因为字符串在示例中应用广泛。这部分的最后一章介绍如何编写清晰易读的C++代码。 第II部分“专业的C++软件设计”介绍C++设计方法论。你会了解设计的重要性、面向对象方法论和代码重用的重要性。 第III部分“C++编码方法”从专业角度概述C++技术。你将学习在C++中管理内存的最佳方式,如何创建可重用的类,以及如何利用重要的语言特性,例如继承。你还会学习输入输出技术、错误处理、字符串本地化和正则表达式的使用,学习如何利用模块组织可重用的代码。这部分还会讨论如何实现运算符重载,如何编写模板,如何使用概念限制模板参数,以及如何解锁lambda表达式和函数对象的功能。这部分还解释了C++标准库,包括容器、迭代器、范围和算法。在这部分你还将了解标准中提供的一些附加库,例如用于处理时间、日期、时区、随机数和文件系统的库。 第IV部分“掌握C++的高级特性”讲解如何最大限度地使用C++。这部分揭示C++中神秘的部分,并描述如何使用这些更高级的特性。在这部分你将学习如何定制和扩充标准库以满足自己的需求、高级模板编程的细节(包括模板元编程),以及如何通过多线程编程来充分利用多处理器和多核系统。 第V部分“C++软件工程”重点介绍如何编写企业级质量的软件。在这部分你将学习当今编程组织使用的工程实践,如何编写高效的C++代码,软件测试概念(如单元测试和回归测试),C++程序的调试技术,如何在自己的代码中融入设计技术、框架和概念性的面向对象设计模式,跨语言和跨平台代码的解决方案等。 《C++20高级编程(第5版) 》最后是四个附录。附录A列出在C++技术面试中取得成功的指南,附录B总结C++标准中的头文件,附录C简要介绍UML(Unified Modeling Language,统一建模语言),附录D是带注解的参考文献列表(附录B~D通过扫描封底二维码获取)。 《C++20高级编程(第5版) 》没有列出C++中每个类、方法和函数的参考。Peter Van Weert和Marc Gregoire撰写的C++17 Standard Library Quick Reference是C++17标准库提供的所有重要数据结构、算法和函数的浓缩版。附录D列出了更多参考资料。下面是两个很好的在线参考资料。 cppreference.com 可使用这个在线参考资料,也可下载其离线版本,在没有连接到互联网时使用。 cplusplus.com/reference/ 《C++20高级编程(第5版) 》正文中提到“标准库参考资料”时,就是指上述C++参考资料。 下面是其他的优质在线资源: github.com/isocpp/CppCoreGuidelines C++核心指南是由C++语言发明人Bjarne Stroustrup亲自领导的协作工作。它们是许多组织多年讨论和设计的结果。指南的目的是帮助人们有效地使用现代C++。这些指导方针侧重于相对较高级别的问题,如接口、资源管理、内存管理和并发。 github.com/Microsoft/GSL 这是微软的指南支持库(GSL)的一个实现,它包含了C++核心指南使用的函数和类型。这是一个只有头文件的库。 isocpp.org/faq 这是一个频繁被提问的C++问题的庞大集合。 stackoverflow.com 搜索常见编程问题的回答,或者提出你自己的问题。 使用《C++20高级编程(第5版) 》的条件 要使用《C++20高级编程(第5版) 》,只需要一台带有C++编译器的计算机。《C++20高级编程(第5版) 》只关注C++中的标准部分,而没有任何编译器厂商相关的扩展。 任何C++编译器 可使用任意C++编译器。如果还没有C++编译器,可下载一个免费的。这有许多选择。例如,对于Windows,可下载Microsoft Visual Studio Community Edition,这个版本免费且包含Visual C++;对于Linux,可使用GCC或Clang,它们也是免费的。 下面将简要介绍如何使用Visual C++和GCC。可参阅相关的编译器文档了解更多信息。 编译器与C++20特性支持 《C++20高级编程(第5版) 》包含C++20标准引入的新特性。在撰写《C++20高级编程(第5版) 》时,还没有编译器可以完全支持C++20的所有新特性。某些新特性仅由某些编译器支持,而其他编译器不支持,而有些功能尚不受任何编译器支持。编译器厂商正在努力支持所有新特性,我相信不久就会有完全符合C++20标准的编译器可用。可以在en.cppreference.com/w/cpp/compiler_support上查看哪些编译器支持哪些功能。 编译器与C++20模块支持 在撰写《C++20高级编程(第5版) 》时,还没有编译器可以完全支持C++20的模块。有些编译器提供了实验性支持,但仍然不完整。《C++20高级编程(第5版) 》到处都使用模块。我们尽了最大努力确保编译器完全支持模块后,所有示例代码都可以编译,但由于我们无法编译和测试所有示例,因此可能会出现一些错误。当使用支持模块的编译器时,如果遇到任何代码示例的问题,请在www.wiley.com/go/proc++5e上仔细检查《C++20高级编程(第5版) 》的勘误表,以查看是否存在已知问题。如果你的编译器还不支持模块,可以将模块化代码转换为非模块化代码,第11章中有简要说明。 示例:Microsoft Visual C++ 2019 首先需要创建一个项目。启动Visual C++ 2019,在欢迎界面上,单击Create A New Project按钮。如果没有出现欢迎界面,单击File | New | Project。在Create A New Project对话框中,使用C++、Windows和Console标签,找到Console App项目模板,然后单击Next按钮。指定项目的名称、保存位置,单击Create按钮。 加载新项目后,就会在Solution Explorer中看到项目文件列表。如果这个停靠窗口不可见,可选择View | Solution Explorer。一个新创建的项目会包括一个名为<projectname>.cpp的文件,可以在该文件中开始编写C++代码。如果想要编译源代码文件(从封底二维码获取《C++20高级编程(第5版) 》源代码压缩文件),则必须在Solution Explorer中选择<projectname>.cpp文件并将其删除。在Solution Explorer中右击项目名,再选择Add | New Item 或Add | Existing Item,就可以给项目添加新文件或已有文件。 在撰写《C++20高级编程(第5版) 》期间,Visual C++ 2019尚未自动启用C++20特性。要启用C++20特性,可在Solution Explorer窗口中右击项目,然后单击Properties。在Properties窗口中,选择Configuration Properties | C/C++ | Language,根据使用的Visual C++版本,将C++ Language Standard选项设置为ISO C++20 Standard或Preview | Features from the Latest C++ Working Draft。仅当项目至少包含一个.cpp文件时,才能访问这些选项。 最后,使用Build | Build Solution编译代码。没有编译错误后,就可以使用Debug | Start Debugging运行了。 模块支持 在撰写《C++20高级编程(第5版) 》期间,Visual C++ 2019尚未完全支持模块。编写或使用自己的模块通常没有问题,但是,导入标准库头文件(如以下内容)还不能立即生效: import <iostream>; 要使此类导入声明生效,目前需要向项目中添加一个单独的头文件,例如HeaderUnits.h,其中包含要导入的每个标准库头文件的导入声明。例如: // HeaderUnits.h #pragma once import <iostream>; import <vector>; import <optional>; import <utility>; // ... 接下来,在Solution Explorer窗口中右击HeaderUnits.h文件,然后单击Properties。选择Configuration Properties | General,设置Item Type为C/C++ Compiler,然后单击Apply按钮。下一步,选择Configuration Properties | C/C++ | Advanced,将Compile As设置为Compile as C++ Header Unit(/exportHeader),然后单击OK按钮。 现在重新编译你的项目,在HeaderUnits.h文件中具有相应导入声明的所有导入声明都应该可以正常编译。 如果你正在使用模块实现分区(见第11章),也称为内部分区,那么右键单击包含此类实现分区的所有文件,单击Properties,转到Configuration Properties | C/C++ | Advanced,将Compile As设置为Compile as C++ Module Internal Partition(/internalPartition),然后单击OK按钮。 示例:GCC 用自己喜欢的任意文本编辑器创建源代码,保存到一个目录下。要编译代码,可打开一个终端,运行如下命令,指定要编译的所有.cpp文件: gcc -std=c++2a -o <executable_name> <source1.cpp> [source2.cpp ...] -std=c++2a用于告诉GCC启用C++20支持。当GCC完全兼容C++20后,这个选项将会改为-std=C++20。 模块支持 在撰写《C++20高级编程(第5版) 》期间,GCC对模块仅有实验性的支持,通过一个特殊的版本(分支devel/c++-modules)。当你在使用这个版本的GCC时,可以通过-fmodules-ts开启module支持,这个选项未来可能会改成-fmodules。 但是,像下面这样对标准库头文件的导入声明还未被很好地支持: import <iostream>; 如果遇到这种情况,将导入声明简单替换为相应的#include指令即可: #include <iostream>; 例如,第1章中的AirlineTicket示例使用了模块。将标准库头文件的导入替换为#include指令后,可以通过更改包含代码的目录并运行以下命令来编译AirlineTicket示例: g++ -std=c++2a -fmodules-ts -o AirlineTicket AirlineTicket.cppm AirlineTicket.cpp AirlineTicketTest.cpp 当其通过编译后,你可以这样运行它: ./AirlineTicket std::format支持 《C++20高级编程(第5版) 》中的许多代码示例都使用了第1章介绍的std::format()。在撰写《C++20高级编程(第5版) 》时,还没有支持std::format()的编译器。但是,只要编译器还不支持std::format(),就可以使用免费提供的{fmt}库作为替换: (1) 从https://fmt.dev/下载{fmt}库的最新版本并解压代码到你的计算机上。 (2) 将include/fmt和src目录复制到你的项目目录中的fmt和src子目录,然后将fmt/core.h、fmt/format.h、fmt/format inl.h和src/format.cc添加到项目中。 (3) 将名为format(无扩展名)的文件添加到项目的根目录,并向其中添加以下代码: #pragma once #define FMT_HEADER_ONLY #include "fmt/format.h" namespace std { using fmt::format; using fmt::format_error; using fmt::formatter; } (4) 最后,添加项目根目录(包含format文件的目录)作为项目的附加include目录。例如,在Visual C++中,在Solution Explorer窗口中右击你的项目,然后单击Properties,选择Configuration Properties | C/C++ | Genaral,将$(ProjectDir);添加到Additional Include Directories选项的前面。 注意: 当编译器支持了标准的std::format()之后,不要忘记取消这些操作。 配套下载文件 读者在学习《C++20高级编程(第5版) 》中的示例时,可以手动输入所有代码,也可使用《C++20高级编程(第5版) 》附带的源代码文件。然而,我建议手动输入所有代码,这对于学习过程和你的记忆都是有益的。《C++20高级编程(第5版) 》使用的所有源代码都可以扫描封底二维码下载。 提示: 由于许多图书的书名都十分类似,因此按ISBN搜索是最简单的,《C++20高级编程(第5版) 》英文版的ISBN是978-1-119-69540-0。 下载代码后,只需要用自己喜欢的解压缩软件进行解压缩即可。 附录B~D和《C++20高级编程(第5版) 》习题答案可扫描封底二维码下载。

more >
扫描二维码
下载APP了解更多
图书分类全部图书
more >
  • Marc Gregoire是一名软件工程师,毕业于比利时鲁汶大学,拥有计算机科学工程硕士学位。之后,他在鲁汶大学又获得人工智能专业的优等硕士学位。完成学业后,他开始为软件咨询公司Ordina Belgium工作。他曾在Siemens 和Nokia Siemens Networks为大型电信运营商提供有关在Solaris上运行关键2G和3G软件的咨询服务。这份工作要求与来自南美、美国、欧洲、中东、非洲和亚洲的国际团队合作。Marc目前担任Nikon Metrology(www.nikonmetrology.com)的软件架构师;Nikon Metrology是Nikon的一个部门,是精密光学仪器、X光机等设备和X光、CT和3D扫描解决方案的领先供应商。
    Marc的主要技术专长是C/C++,特别是Microsoft VC++和MFC框架。他还擅长在Windows和Linux平台上开发24×7运行的C++程序,例如KNX/EIB家庭自动化监控软件。除了C/C++之外,Marc还喜欢C#。 
    2007年4月,他凭借Visual C++方面的专业技能,获得了微软年度MVP称号。
    Marc还是比利时C++用户组(www.becpp.org)的创始人,是C++ Standard Library Quick Reference 第1版和第2版(Apress)的共同作者,以及多家出版社出版的多种书籍的技术编辑,是C++大会CppCon的活跃演讲者。

  • 拥抱C++的深度和复杂性,挖掘更多可能
    众所周知,C++难以掌握,但其广泛的功能使其成为游戏和商业软件应用程序中最常用的语言。即使是有经验的用户通常也不熟悉许多高级特性,但C++20的发布提供了探索该语言全部功能的绝佳机会。《C++20高级编程(第5版)》为C++的必要内容提供了一个代码密集型、面向解决方案的指南,包括**版本中的**工具和功能。本书包含面向现实世界编程的实用指导,是程序员深入研究C++的理想机会。第5版涵盖了C++20的内容。

精彩书评more >

标题

评论

版权所有(C)2023 清华大学出版社有限公司 京ICP备10035462号 京公网安备11010802042911号

联系我们 | 网站地图 | 法律声明 | 友情链接 | 盗版举报 | 人才招聘