有效的C ++仍然有效吗?


139

从我在这篇文章中看到的内容,我决定开始阅读《有效的C ++》一书。

但是,由于C ++ 11带来了许多新功能,并且一些良好实践发生了变化,所以我不确定这是否是一个好主意。C ++ 11的出现是否已淘汰有效C ++中包含的任何建议?如果是这样,我应该避免哪些主题?


4
作者在文章scottmeyers.blogspot.co.uk/2013/01/…和网站上的其他文章中发表了一些评论,基本上是的,但还有更多需要考虑的地方。
jcoder

2
请看一下目录:pearson.ch/1471/9780321334879/…。许多项目仍然有效,有些可以通过r值引用和其他新方法进行改进,但总的来说仍然应该有效。
Zeta 2013年

这个问题不适合SO。(1)所询问的内容不在问题中,而是在场外资源中(甚至没有链接)。(2)解决本书中的每个建议都是一个单独的答案,在这种情况下,这是一个列表问题,需要太多的答案,否则,一个答案应该讨论整本书,在这种情况下,这个问题太笼统了。就是说,对任何单个建议提出相同的问题将是很好的。
Ben Voigt 2014年

2
(1)我参考的是SO中最受欢迎的问题之一中提到的一本书。(2)可以接受投诉,但是您几乎可以回答任何问题。或者,您可以根据自己的需要缩小范围。我认为答案是相当不错的,而且比SO中的大多数问题要狭窄得多,因此我认为不需要详细的清单。非主题:猜猜谁有一个问题始于“任何人都可以在下面链接的std :: string代码中击败我的整数性能吗?”
德国卡帕诺2014年

Answers:


93

这就是斯科特·梅耶斯(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'ReillyAmazon(以及许多其他可以谷歌搜索到的)已开始出售新标题“ Effective Modern C ++”


45

是的,绝对还是值得一读。Scott正在研究本新书:Effective C ++ 11,它专注于仅C ++ 11的代码。在有效的C ++仍然是非常相关的,而不是由新书取代。购买,阅读,享受:)


1
我看到这些书是相互依存的,因此有效的C ++是至关重要的基础。如果您仅阅读两者之一,那么它应该是有效的C ++。有效的现代C ++更加深奥(老实说,大多数C ++远非“现代”)。
安迪·克鲁维尔

21

第一,这本书对于C ++ 03当然仍然有效。

第二,Meyers是在写还是已经写过,这取决于您何时阅读这句话,有效的C ++ 11。

第三,总的来说,本书的要点仍然有效。C ++仍然偏爱速度而不是安全性,Effective C ++中的许多问题都围绕着这一问题。

唯一认为无效的一点是说“不要这样做,而要这样做”。“请勿执行此操作”仍然有效。但是C ++将解决一些问题。特别是,可能不赞成使用boost的任何建议,因为C ++ 11包含了Meyers特别向读者推荐Boost的许多功能。


1
当然tr1,由于我相信他提到的每个要素都tr1将其纳入C ++ 11标准。
凯尔·斯特兰德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.