高效现代C++
高效现代C++
简介:
引言
斯科特·迈耶斯所著的《高效现代C++》(英文原名Effective Modern C++)并非又一本普通的语言指南。它是C++多年演进过程中积累的实践经验的精华。该书于2014年出版,已成为成千上万从过时的C++98/03标准转向现代C++11和C++14的开发者的案头必备。迈耶斯以其“Effective C++”系列闻名,此次他聚焦于那些从根本上改变了代码编写方式的语言新特性。
本书包含42条具体建议(Item),每条专注于一个重要主题:从正确使用auto和Lambda表达式,到移动语义的细节以及智能指针的使用。它并非面向初学者的教程,而更像是一本为希望用现代C++编写高效、安全且可维护代码的经验丰富的程序员准备的指南。
本书内容
本书的核心思想是展示如何正确使用C++11/14的新特性,同时避免常见陷阱。迈耶斯不仅仅列举语法结构,而是解释为什么某些解决方案优于其他方案。本书涵盖以下关键领域:
- 类型推导:详细分析
auto和decltype的机制及其在不同上下文中的行为。 - 智能指针:
std::unique_ptr、std::shared_ptr、std::weak_ptr——何时以及如何使用,如何避免循环引用。 - 移动语义与完美转发:右值引用、
std::move、std::forward,以及使用时的典型错误。 - Lambda表达式:语法、变量捕获、泛型Lambda、与
std::bind的比较。 - 并行与并发:
std::thread、std::async、任务和期值的基础知识。 - 模板与泛型编程:可变参数模板、返回类型中的
auto、constexpr。
适合读者
本书面向已有C++使用经验(至少达到C++98/03水平)并希望掌握现代标准的程序员。它将有助于:
- 从C++98过渡到C++11/14的开发者。
- 希望深入理解移动语义和智能指针的工程师。
- 编写高负载系统并追求极致性能的人。
- 研究现代C++方法的教师和高年级学生。
读者将学到什么
阅读本书后,读者将能够:
- 自信地使用
auto和decltype进行类型推导,理解所有细微差别。 - 在智能指针和原始指针之间做出正确选择,避免内存泄漏。
- 应用移动语义优化性能,避免悬垂引用错误。
- 编写高效的Lambda表达式,理解捕获机制和生命周期。
- 使用
std::async和std::future处理异步任务,避免死锁。 - 理解何时
constexpr真正带来优势,何时则不然。 - 避免使用过时的构造(例如,用Lambda代替
std::bind)。
本书优势
本书最大的优点是其实用性。每条建议都附有代码示例,既展示正确用法也展示错误用法。迈耶斯非常关注“陷阱”:例如,为什么auto可能推导出非预期的类型,或者移动语义为何对某些类型无效。
另一个优点是清晰的结构。本书按主题分章,每条Item都可以独立阅读。