成功加入购物车
图书条目标准图
正版书籍批量上传,价格不符请咨询客服支持开票
谢丙堃 / 人民邮电出版社 / 2021-10 / 平装
售价 ¥ 79.14 6.6折
定价 ¥119.90
品相 全新
优惠 满包邮
延迟发货说明
上书时间2024-05-13
卖家超过10天未登录
现代C++语言核心特性解析
本书是一本C++进阶图书,全书分为42章,深入探讨了从C++11到C++20引入的核心特性。书中不仅通过大量的实例代码讲解特性的概念和语法,还从编译器的角度分析特性的实现原理,书中还穿插了C++标准委员会制定特性标准时的一些小故事,帮助读者知其然也知其所以然。 本书适合因为工作需要学习C++新特性的C++从业者,同样也适合对C++新特性非常感兴趣的C++爱好者。而对于C++初学者来说,也有必要在理解C++基础知识后,通过本书来领略C++的另外一道风景。
谢丙堃,从事 C++ 开发工作十余年,先后在数家互联网公司担任 C++ 开发工程师和技术经理。他也是 C++ 语言的爱好者,热衷于研究 C++ 语言的新特性以及 C++ 模板元编程技术。
第 1章 新基础类型(C++11~C++20)1 1.1 整数类型long long1 1.2 新字符类型char16_t和char32_t4 1.2.1 字符集和编码方法4 1.2.2 使用新字符类型char16_t和char32_t5 1.2.3 wchar_t存在的问题6 1.2.4 新字符串连接7 1.2.5 库对新字符类型的支持7 1.3 char8_t字符类型8 1.4 总结8 第 2章 内联和嵌套命名空间(C++11~C++20)9 2.1 内联命名空间的定义和使用9 2.2 嵌套命名空间的简化语法11 2.3 总结13 第3章 auto占位符(C++11~C++17)14 3.1 重新定义的auto关键字14 3.2 推导规则16 3.3 什么时候使用auto18 3.4 返回类型推导20 3.5 lambda表达式中使用auto类型推导20 3.6 非类型模板形参占位符21 3.7 总结22 第4章 decltype说明符(C++11~C++17)23 4.1 回顾typeof和typeid23 4.2 使用decltype说明符24 4.3 推导规则27 4.4 cv限定符的推导29 4.5 decltype(auto)30 4.6 decltype(auto)作为非类型模板形参占位符31 4.7 总结32 第5章 函数返回类型后置(C++11)33 5.1 使用函数返回类型后置声明函数33 5.2 推导函数模板返回类型34 5.3 总结36 第6章 右值引用(C++11 C++17 C++20)37 6.1 左值和右值37 6.2 左值引用39 6.3 右值引用40 6.4 右值的性能优化空间42 6.5 移动语义43 6.6 值类别47 6.7 将左值转换为右值48 6.8 引用和引用折叠50 6.9 完美转发52 6.10 针对局部变量和右值引用的隐式移动操作55 6.11 总结57 第7章 lambda表达式(C++11~C++20)58 7.1 lambda表达式语法58 7.2 捕获列表60 7.2.1 作用域60 7.2.2 捕获值和捕获引用61 7.2.3 特殊的捕获方法64 7.3 lambda表达式的实现原理65 7.4 无状态lambda表达式68 7.5 在STL中使用lambda表达式68 7.6 广义捕获69 7.7 泛型lambda表达式72 7.8 常量lambda表达式和捕获*this72 7.9 捕获[=, this]73 7.10 模板语法的泛型lambda表达式74 7.11 可构造和可赋值的无状态lambda表达式76 7.12 总结77 第8章 非静态数据成员默认初始化(C++11 C++20)78 8.1 使用默认初始化78 8.2 位域的默认初始化79 8.3 总结80 第9章 列表初始化(C++11 C++20)81 9.1 回顾变量初始化81 9.2 使用列表初始化82 9.3 std::initializer_list详解84 9.4 使用列表初始化的注意事项86 9.4.1 隐式缩窄转换问题86 9.4.2 列表初始化的优先级问题87 9.5 指定初始化88 9.6 总结90 第 10章 默认和删除函数(C++11)91 10.1 类的特殊成员函数91 10.2 显式默认和显式删除95 10.3 显式删除的其他用法98 10.4 explicit和=delete99 10.5 总结100 第 11章 非受限联合类型(C++11)101 11.1 联合类型在C++中的局限性101 11.2 使用非受限联合类型102 11.3 总结106 第 12章 委托构造函数(C++11)107 12.1 冗余的构造函数107 12.2 委托构造函数110 12.3 委托模板构造函数114 12.4 捕获委托构造函数的异常115 12.5 委托参数较少的构造函数116 12.6 总结117 第 13章 继承构造函数(C++11)118 13.1 继承关系中构造函数的困局118 13.2 使用继承构造函数119 13.3 总结123 第 14章 强枚举类型(C++11 C++17 C++20)124 14.1 枚举类型的弊端124 14.2 使用强枚举类型129 14.3 列表初始化有底层类型枚举对象131 14.4 使用using打开强枚举类型133 14.5 总结135 第 15章 扩展的聚合类型(C++17 C++20)136 15.1 聚合类型的新定义136 15.2 聚合类型的初始化137 15.3 扩展聚合类型的兼容问题139 15.4 禁止聚合类型使用用户声明的构造函数140 15.5 使用带小括号的列表初始化聚合类型对象142 15.6 总结143 第 16章 override和final说明符(C++11)144 16.1 重写、重载和隐藏144 16.2 重写引发的问题145 16.3 使用override说明符145 16.4 使用final说明符146 16.5 override和final说明符的特别之处148 16.6 总结148 第 17章 基于范围的for循环(C++11 C++17 C++20)149 17.1 烦琐的容器遍历149 17.2 基于范围的for循环语法150 17.3 begin和end函数不必返回相同类型151 17.4 临时范围表达式的陷阱152 17.5 实现一个支持基于范围的for循环的类153 17.6 总结155 第 18章 支持初始化语句的if和switch(C++17)156 18.1 支持初始化语句的if156 18.2 支持初始化语句的switch159 18.3 总结160 第 19章 static_assert声明161 19.1 运行时断言161 19.2 静态断言的需求162 19.3 静态断言163 19.4 单参数static_assert164 19.5 总结165 第 20章 结构化绑定(C++17 C++20)166 20.1 使用结构化绑定166 20.2 深入理解结构化绑定169 20.3 结构化绑定的3种类型171 20.3.1 绑定到原生数组171 20.3.2 绑定到结构体和类对象172 20.3.3 绑定到元组和类元组的对象173 20.4 实现一个类元组类型175 20.5 绑定的访问权限问题178 20.6 总结179 第 21章 noexcept关键字(C++11 C++17 C++20)180 21.1 使用noexcept代替throw180 21.2 用noexcept来解决移动构造问题183 21.3 noexcept和throw()185 21.4 默认使用noexcept的函数186 21.5 使用noexcept的时机189 21.6 将异常规范作为类型的一部分190 21.7 总结192 第 22章 类型别名和别名模板(C++11 C++14)193 22.1 类型别名193 22.2 别名模板194 22.3 总结196 第 23章 指针字面量nullptr(C++11)197 23.1 零值整数字面量197 23.2 nullptr关键字198 23.3 总结201 第 24章 三向比较(C++20)202 24.1 “太空飞船”(spaceship)运算符202 24.2 三向比较的返回类型202 24.2.1 std::strong_ordering203 24.2.2 std::weak_ordering204 24.2.3 std::partial_ordering205 24.3 对基础类型的支持206 24.4 自动生成的比较运算符函数207 24.5 兼容旧代码210 24.6 总结211 第 25章 线程局部存储(C++11)212 25.1 操作系统和编译器对线程局部存储的支持212 25.2 thread_local说明符213 25.3 总结217 第 26章 扩展的inline说明符(C++17)218 26.1 定义非常量静态成员变量的问题218 26.2 使用inline说明符219 26.3 总结220 第 27章 常量表达式(C++11~C++20)221 27.1 常量的不确定性221 27.2 constexpr值224 27.3 constexpr函数225 27.4 constexpr构造函数228 27.5 对浮点的支持230 27.6 C++14标准对常量表达式函数的增强230 27.7 constexpr lambdas表达式233 27.8 constexpr的内联属性235 27.9 if constexpr236 27.10 允许constexpr虚函数240 27.11 允许在constexpr函数中出现Try-catch244 27.12 允许在constexpr中进行平凡的默认初始化244 27.13 允许在constexpr中更改联合类型的有效成员245 27.14 使用consteval声明立即函数246 27.15 使用constinit检查常量初始化247 27.16 判断常量求值环境248 27.17 总结252 第 28章 确定的表达式求值顺序(C++17)253 28.1 表达式求值顺序的不确定性253 28.2 表达式求值顺序详解254 28.3 总结255 第 29章 字面量优化(C++11~C++17)257 29.1 十六进制浮点字面量257 29.2 二进制整数字面量258 29.3 单引号作为整数分隔符258 29.4 原生字符串字面量259 29.5 用户自定义字面量261 29.6 总结267 第30章 alignas和alignof(C++11 C++17)268 30.1 不可忽视的数据对齐问题268 30.2 C++11标准之前控制数据对齐的方法270 30.3 使用alignof运算符272 30.4 使用alignas说明符273 30.5 其他关于对齐字节长度的支持276 30.6 C++17中使用new分配指定对齐字节长度的对象278 30.7 总结279 第31章 属性说明符和标准属性(C++11~C++20)280 31.1 GCC的属性语法280 31.2 MSVC的属性语法281 31.3 标准属性说明符语法282 31.4 使用using打开属性的命名空间283 31.5 标准属性283 31.5.1 noreturn284 31.5.2 carries_dependency286 31.5.3 deprecated286 31.5.4 fallthrough287 31.5.5 nodiscard288 31.5.6 maybe_unused290 31.5.7 likely和unlikely290 31.5.8 no_unique_address291 31.6 总结293 第32章 新增预处理器和宏(C++17 C++20)294 32.1 预处理器__has_include294 32.2 特性测试宏295 32.2.1 属性特性测试宏295 32.2.2 语言功能特性测试宏295 32.2.3 标准库功能特性测试宏297 32.3 新增宏__VA_OPT__301 32.4 总结302 第33章 协程(C++20)303 33.1 协程的使用方法303 33.2 协程的实现原理308 33.2.1 co_await运算符原理308 33.2.2 co_yield运算符原理313 33.2.3 co_return运算符原理317 33.2.4 promise_type的其他功能319 33.3 总结320 第34章 基础特性的其他优化(C++11~C++20)321 34.1 显式自定义类型转换运算符(C++11)321 34.2 关于std::launder()(C++17)325 34.3 返回值优化(C++11~C++17)326 34.4 允许按值进行默认比较(C++20)333 34.5 支持new表达式推导数组长度(C++20)334 34.6 允许数组转换为未知范围的数组(C++20)335 34.7 在delete运算符函数中析构对象(C++20)336 34.8 调用伪析构函数结束对象声明周期(C++20)337 34.9 修复const和默认复制构造函数不匹配造成无法编译的问题 (C++20)338 34.10 不推荐使用volatile的情况(C++20)339 34.11 不推荐在下标表达式中使用逗号运算符(C++20)340 34.12 模块(C++20)340 34.13 总结341 第35章 可变参数模板(C++11 C++17 C++20)342 35.1 可变参数模板的概念和语法342 35.2 形参包展开344 35.3 sizeof...运算符352 35.4 可变参数模板的递归计算353 35.5 折叠表达式354 35.6 一元折叠表达式中空参数包的特殊处理357 35.7 using声明中的包展开358 35.8 lambda表达式初始化捕获的包展开359 35.9 总结361 第36章 typename优化(C++17 C++20)362 36.1 允许使用typename声明模板形参362 36.2 减少typename使用的必要性363 36.3 总结365 第37章 模板参数优化(C++11 C++17 C++20)366 37.1 允许常量求值作为所有非类型模板的实参366 37.2 允许局部和匿名类型作为模板实参368 37.3 允许函数模板的默认模板参数369 37.4 函数模板添加到ADL查找规则370 37.5 允许非类型模板形参中的字面量类类型371 37.6 扩展的模板参数匹配规则373 37.7 总结374 第38章 类模板的模板实参推导(C++17 C++20)375 38.1 通过初始化构造推导类模板的模板实参375 38.2 拷贝初始化优先377 38.3 lambda类型的用途378 38.4 别名模板的类模板实参推导380 38.5 聚合类型的类模板实参推导380 38.6 总结382 第39章 用户自定义推导指引(C++17)383 39.1 使用自定义推导指引推导模板实例383 39.2 聚合类型类模板的推导指引386 39.3 总结387 第40章 SFINAE(C++11)388 40.1 替换失败和编译错误388 40.2 SFINAE规则详解389 40.3 总结394 第41章 概念和约束(C++20)395 41.1 使用std::enable_if约束模板395 41.2 概念的背景介绍396 41.3 使用concept和约束表达式定义概念397 41.4 requires子句和约束检查顺序398 41.5 原子约束401 41.6 requires表达式403 41.6.1 简单要求404 41.6.2 类型要求405 41.6.3 复合要求405 41.6.4 嵌套要求406 41.7 约束可变参数模板407 41.8 约束类模板特化408 41.9 约束auto409 41.10 总结410 第42章 模板特性的其他优化(C++11 C++14)411 42.1 外部模板(C++11)411 42.2 连续右尖括号的解析优化(C++11)413 42.3 friend声明模板形参(C++11)415 42.4 变量模板(C++14)417 42.5 explicit(bool)419 42.6 总结423 附录 特性章节对照表424
展开全部
配送说明
...
相似商品
为你推荐
开播时间:09月02日 10:30