13

注意:标记为社区 wiki。

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

除了:

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

优秀的 C++ 程序员还必须了解哪些其他技术?

谢谢!

4

6 回答 6

8

我认为这应该涵盖它:

更多 C++ 习语 - 维基教科书

于 2010-02-26T22:17:54.490 回答
5
  • 面向对象设计
  • 异常安全保证的类型(这是大多数设计模式/习惯用法的基础)。
  • 何时使用哪些标准容器
  • 促进
于 2010-02-26T22:10:15.143 回答
2

对于优秀的 C++ 程序员来说,前两个是“必须知道的”。“优秀的 C++ 程序员”不会为了好玩而重载运算符。

于 2010-02-26T22:16:37.873 回答
2

基本的:

  • RTTI
  • 虚函数
  • shared_ptr 等
  • 模板
  • 虚拟继承
  • 可变参数宏

也很有用:

  • 属性(取决于你的编译器)
  • 可变参数模板
  • 可变函数
  • Constexpr(在编译时排序/计算字符串的哈希等......但后者与最后一节有关)
  • 拉姆达斯

对脑残或特殊情况有用:

  • CRTP
  • SFINAE
  • inable_if(类型特征)
  • Foreach 宏
  • 用户定义的文字
于 2012-10-27T01:17:23.037 回答
0

(几乎不是必须知道的,但仍然有用)使用运算符重载和模板元编程来编写特定领域的语言(参见 Boost.Spirit 的一个很好的例子)——但这也是一种让你自己很容易的事情.

于 2010-02-26T22:12:23.607 回答
0

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

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

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

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

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

于 2015-11-06T09:29:43.633 回答