问题 如何学习编写惯用的c ++代码[关闭]


我最近强迫自己学习C ++,我刚读完了Herbert Schildt的C ++:The Complete Reference一书。我喜欢这本书,并认为我或多或少得到了全局。我注意到,当我尝试与其他人一起检查我使用我学到的材料编写的东西时,它们通常被认为是非惯用的,并且被STL方式取代,这样做更安全,更容易(好吧,这本书没有'覆盖STL和Boost库)。

所以我想问一下:学习优秀C ++程序模式有哪些好的资源?我在哪里可以从“C ++方式”学习基本模式来做事,而不仅仅是在C ++中重复C模式?

我对包含STL和Boost内容的来源特别感兴趣。


2749
2017-11-30 15:12


起源

为什么不是STL和Boost文档? - Javier
因为他们吮吸作为教学辅助,而不是这样的。 - Konrad Rudolph
出于同样的原因,您无法通过阅读用户手册来学习驾驶。 - John Dibling
@John Dibling:好笑,我做到了! - Javier
Herbert Schildt的C ++书籍 是 非常不推荐 由C ++社区提供。你读书的时候好多了 实际上知道他们在谈论什么的人的C ++书。 - In silico


答案:


你可能想看看 最终C ++书籍指南和列表

为了您的目的,我特别建议:

它们没有特别的顺序,您也可能希望在它们之间阅读和编写代码。

(注意:正如@John Dibling所说,Boost书可能有点过时,我自己没有经验)


7
2017-11-30 15:29



整体+1,但我不推荐升级书。我发现它已经过时了,并不适用于我的实际需求。 - John Dibling
好的,谢谢,编辑了答案:) - Palmik
前两个。然后他将需要Stroustrup的C ++编程语言作为参考。 - Daniel Lidström


既然你已经完成了Herbert Schildt的书,你可以阅读Bjarne Stroustrup的书(C ++编程语言)或布鲁斯埃克尔的书(用C ++思考第1部分和第2部分)。 Eckel的书可以在互联网上免费获得,而第2部分则讨论STL。


3
2017-11-30 15:32



+1,Eckel书真的很棒 - Javier
对于阅读和基础学习,是的,但它们也有点过时,而且主要是非意识形态的Modern C ++。 - Fabio Fracassi


学习如何编写C ++惯用代码的最佳方法是编写C ++代码并让一些高级C ++开发人员审查您的代码。 你还应该阅读一些最着名的C ++书籍(Scott Meyers的Effective C ++是一个好的开始,现代C ++设计是一本不错的书,学习如何编写精美的C ++代码,但如果你想发现和理解它是一本很好的书。通用编程的概念)。

最重要的是,你应该阅读很多关于STL的文档,并提升并学习很多关于迭代器的知识。迭代器是使用STL(并促进容器和算法的实现)的关键,如果你不知道如何使用它们,你就不会编写C ++惯用代码。永远。


1
2017-11-30 15:43





加速C ++ 是一个从一开始就使用STL的C ++简介。这不是一本很长的书,但它是“密集的”,对于你IMO的人来说是一个很好的选择。当我阅读它时,我对C ++的体验与你的相似。


1
2017-11-30 15:47





我(也)建议:

  • 有效的C ++有效的STL 史蒂夫迈尔斯。它们易于消化,但非常有价值 - 有时甚至是有启发性的。
  • 代码完成 (1993年的版本价格便宜,而且差别不大)。这是漫长的,但它穿过整个领域 成为一名程序员意味着什么 至 for循环应该如何看待。 (如果它更短的话会更好 - 它覆盖的方式很多,很难放置它)。亲爱的,因为它很好地说明了两点:
    • 代码妥协
    • 知道事实,(但我们仍然设法通过直觉感受到)
  • C ++ FAQ Lite / C ++ FAQ
  • 我会投入 事实和谬误 罗伯特·格拉斯(Robert Glass) - 它不能很好地满足您的要求,但请继续阅读。

你很不满意其他人的代码是很自然的。这是编程的典型 - 甚至是 我自己的代码 五年前写的是总共n00b。对于C ++来说,这可能更为明确,因为它迎合了不同的风格,并且经常将自由(“你可以”)放在guildelines上(“就是这样”)。

仍然,仔细考虑现有的代码 - 你的或其他代码 - 并考虑如何改进它。另外,搞清楚 为什么 这是它有时帮助的方式。


(我记得有几个TheDailyWTF,每个人都会对这个愚蠢和不合理的事情感到惊讶 - 但在某个地方,埋没在我的中间,是有经验的人在某种情况下令人信服地解释这比明显的解决方案更好)。


1
2017-11-30 15:50