根据我在这篇文章中看到的内容,我决定开始阅读《Effective C++ 》一书。
但是现在由于 C++11 带来了许多新功能,并且一些好的做法发生了变化,我不确定这是否真的是一个好主意。C++11 的出现是否已经弃用了 Effective C++ 中包含的任何建议?如果是这样,我应该避免哪些话题?
根据我在这篇文章中看到的内容,我决定开始阅读《Effective C++ 》一书。
但是现在由于 C++11 带来了许多新功能,并且一些好的做法发生了变化,我不确定这是否真的是一个好主意。C++11 的出现是否已经弃用了 Effective C++ 中包含的任何建议?如果是这样,我应该避免哪些话题?
这可能会让您想知道这个 C++0x 之前版本的 Effective C++ 中的信息和建议是否仍然相关。我很高兴地报告确实如此。事实上,令人惊讶的是。花了将近两年的时间深入了解 C++0x 的细节,当我回顾这本书的目录时,我想到了 C++0x,预计会有点抱怨。当然有些项目是不合适的。但我发现的建议被证明是合理的。C++0x 开发人员是否应该更喜欢 const、枚举和内联
#defines
(第 2 项)?他们应该。他们是否应该防止异常离开析构函数(第 8 条)?当然。他们应该使用对象来管理资源吗?将数据成员声明为私有?考虑虚拟功能的替代品?从模板中提取与参数无关的代码?(第 13、22、35 和 44 项。)是的,是的,是的,是的!我的目标一直是让 Effective C++ 的目录总结书中的建议,并且该总结仍然适用于 C++0x 开发和“传统”C++ 开发。C++0x 是一种更大的语言,在某些方面它是不同的语言,但有效利用“旧”C++ 的核心技术也是有效利用 C++0x 的核心。这并不意味着此 Effective C++ 与 C++0x 完美匹配。本书没有讨论 C++0x 的新特性,因此缺少有关有效利用这些特性的项目。一个 C++0xified Effective C++ 肯定会有专门用于移动操作、统一初始化和 lambda 表达式的项目,并且它可能会有一整章关于有效使用并发 API。这样的书还会包含不同的示例,例如,使用自动变量、基于范围的 for 循环、类内默认初始化器以及偶尔使用的可变参数模板的示例。本书在对 C++0x 的支持方面存在不足,错误在于遗漏,而非委托。
更新:自 2014 年 11 月起,O'Reilly和亚马逊(以及您可以通过谷歌搜索的许多其他产品)开始销售新书名Effective Modern C++ 。
是的,绝对值得一读。Scott 正在写一本新书:Effective C++11,它专注于仅 C++11 的代码。Effective C++仍然非常相关,并且没有被新书取代。购买,阅读,享受 :)
一,这本书当然仍然适用于 C++03。
二、Meyers正在写还是已经写,取决于你什么时候读到这句话,Effective C++11。
三、一般而言,本书的观点仍然有效。C++ 仍然倾向于速度而不是安全性,Effective C++中的许多问题都围绕着这一点展开。
我唯一认为无效的观点是那些说“不要这样做,而是这样做”的观点。“不要这样做”仍然有效。但是 C++ 会解决一些问题。特别是,任何使用 boost 的建议都可能被弃用,因为 C++11 包含了许多 Meyers 专门向读者推荐 Boost 的特性。