从我在这篇文章中看到的内容,我决定开始阅读《有效的C ++》一书。
但是,由于C ++ 11带来了许多新功能,并且一些良好实践发生了变化,所以我不确定这是否是一个好主意。C ++ 11的出现是否已淘汰有效C ++中包含的任何建议?如果是这样,我应该避免哪些主题?
从我在这篇文章中看到的内容,我决定开始阅读《有效的C ++》一书。
但是,由于C ++ 11带来了许多新功能,并且一些良好实践发生了变化,所以我不确定这是否是一个好主意。C ++ 11的出现是否已淘汰有效C ++中包含的任何建议?如果是这样,我应该避免哪些主题?
Answers:
这就是斯科特·梅耶斯(Scott Meyers)自己在博客上所说的
这可能使您想知道此有效C ++的C ++ 0x之前版本中的信息和建议是否仍然有用。我很高兴地报告确实如此。实际上,令人惊讶的是。在花了将近两年的时间研究C ++ 0x的细节之后,我希望在牢记C ++ 0x的情况下阅读本书的目录时会有点吟。当然,某些项目是不合适的。但是我发现的建议被证明是正确的。C ++ 0x开发人员应该使用const,枚举和内联来代替
#defines
(项目2)?他们应该。他们是否应该防止异常离开析构函数(第8项)?当然。他们应该使用对象来管理资源吗?声明数据成员为私人成员?考虑替代虚拟功能吗?从模板中分解出与参数无关的代码?(项目13、22、35和44。)是,是,是,是!我的目标一直是有效的C ++目录对书中的建议进行总结,并且该总结仍然适用于C ++ 0x开发和“传统” C ++开发。C ++ 0x是一门更大的语言,在某些方面它是一种不同的语言,但是有效利用“旧” C ++的核心技术也是有效利用C ++ 0x的核心。这并不意味着此有效的C ++是C ++ 0x的完美匹配。本书没有讨论C ++ 0x的新增功能,因此缺少有关有效利用这些功能的内容。C ++ 0xified的有效C ++肯定会具有用于移动操作,统一初始化和lambda表达式的Items,并且可能有一整章都涉及如何有效地使用并发API。这样的书还将包含不同的示例,例如,使用自动变量的示例,基于范围的for循环,类内默认初始化程序以及偶发的可变参数模板。如果本书对C ++ 0x的支持不足,那么这些错误就是遗漏的,而不是委托的。
更新:自2014年11月起,O'Reilly和Amazon(以及许多其他可以谷歌搜索到的)已开始出售新标题“ Effective Modern C ++”。
第一,这本书对于C ++ 03当然仍然有效。
第二,Meyers是在写还是已经写过,这取决于您何时阅读这句话,有效的C ++ 11。
第三,总的来说,本书的要点仍然有效。C ++仍然偏爱速度而不是安全性,Effective C ++中的许多问题都围绕着这一问题。
我唯一认为无效的一点是说“不要这样做,而要这样做”。“请勿执行此操作”仍然有效。但是C ++将解决一些问题。特别是,可能不赞成使用boost的任何建议,因为C ++ 11包含了Meyers特别向读者推荐Boost的许多功能。
tr1
,由于我相信他提到的每个要素都tr1
将其纳入C ++ 11标准。