基本的C++习语/技巧

14

注意:标记为社区维护。

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

除了:

  • 使用STL
  • 实现RAII
  • 实现引用计数的智能指针
  • 编写自己的基于策略的模板类
  • 重载运算符<< 以供娱乐

还有哪些技术是一个优秀的C++程序员必须掌握的?

谢谢!


1
实现RAII,当然可以。实现引用计数智能指针?我希望已经存在的实现足以防止需要这样做。 - Nick Meyer
6个回答

9

是的,C++惯用法涵盖了许多C++工程师应该知道的惯用法,比如PImpl、RAII、CRTP、拷贝和交换。 - baotiao

5
  • 面向对象设计
  • 异常安全性保证的类型(大部分设计模式/惯用法都基于此)。
  • 何时使用哪些标准容器
  • Boost库

近年来,C++ 在许多方面似乎已经远离了面向对象的设计... - einpoklum

2
第一和第二点对于优秀的C++程序员来说是必须掌握的。优秀的C++程序员不会仅仅为了好玩而重载运算符。

2

基础内容:

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

其他有用的内容:

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

用于特殊情况或脑残代码:

  • CRTP
  • SFINAE
  • enable_if(类型特征)
  • foreach宏
  • 用户定义字面量

0

(这并不是必须知道的,但仍然有用)使用运算符重载和模板元编程编写特定领域语言(请参见 Boost.Spirit 的良好示例)- 但这也是容易自己给自己惹麻烦的事情。


0
我提高C++编程技能的方法是通过阅读leveldb源代码。因为leveldb是一个产品级别的代码,所以你可以从一个真实的产品中学习C++语言习惯和设计模式。让我给你举几个例子。
Leveldb使用Pimpl惯用法,在几乎所有头文件中都使用了,例如table.h、table_build.h、write_batch.h等。你可以直接从代码中学习。
Leveldb使用了许多面向对象的设计模式,例如建造者模式。表格有table_build类来建立表格,块有block_build类来构建块等。
Leveldb还使用了迭代器模式,这使得我们更方便地使用leveldb。
因此,我认为leveldb包含了许多C++工程师需要了解的惯用法或设计模式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接