基础C ++习语/技巧

时间:2010-02-26 22:07:33

标签: c++ idioms

注意:标记为社区维基。

最近几天,我意识到我对C ++知之甚少。

此外:

  • 使用STL
  • 实施RAII
  • 实施重新计算的智能指针
  • 编写自己的基于策略的模板类
  • 重载运算符<<为了好玩

对于一个优秀的C ++程序员,还必须知道哪些其他技术?

谢谢!

6 个答案:

答案 0 :(得分:5)

我认为这应该涵盖它:

More C++ Idioms - Wikibooks

答案 1 :(得分:4)

  • OO Design
  • 异常安全保证的类型(这是大多数设计模式/惯用语所基于的)。
  • 何时使用哪个标准容器
  • 升压

答案 2 :(得分:2)

对于一个优秀的C ++程序员来说,前两个是“必须知道的”。 “优秀的C ++程序员”不会让操作员过载以获得乐趣。

答案 3 :(得分:1)

基本:

  • RTTI
  • 虚拟功能
  • shared_ptr等
  • 模板
  • 虚拟继承
  • Variadic宏

也很有用:

  • 属性(取决于您的编译器)
  • 可变参数模板
  • Variadic功能
  • Constexpr(在编译时排序/计算字符串的哈希等...但后者与最后一节有关)
  • lambda表达式

对于吸吮或在特殊情况下有用:

  • CRTP
  • SFINAE
  • inable_if(type traits)
  • Foreach宏
  • 用户定义的文字

答案 4 :(得分:0)

(几乎不是必须知道的,但仍然有用)使用运算符重载和模板元编程来编写特定于域的语言(参见Boost.Spirit的一个很好的例子) - 但这是让你自己在脚下拍摄的东西也很容易。

答案 5 :(得分:0)

我以前改进c ++的方法是阅读leveldb的源代码。因为leveldb是产品级代码。因此,您可以从真实产品中学习cpp习语和设计模式。让我给你看一些例子

Leveldb使用Pimpl成语,几乎在所有的头文件中,例如table.h table_build.h write_batch.h。您可以直接从代码中学习

Leveldb使用了很多OO设计模式,比如构建模式,表有table_build类来构建表,块有block_build类来构建块

Leveldb也使用Iterator模式,迭代器使我们使用leveldb更方便。

所以我认为leveldb包含许多c ++工程师应该知道的习语或设计模式。