C++程序员应该使用哪些C++习惯用法?

Par*_*ial 46 c++ design-patterns idioms c++-faq

C++程序员应该知道哪些C++习惯用法?

通过C++习语,我的意思是设计模式或做某些事情的方式,这些模式仅适用于C++或更适用于C++而不是大多数其他语言.

为什么要使用成语,这些成语会做什么?

Jer*_*fin 55

到目前为止,学习和了解(几乎)C++独有的最重要的"模式"是RAII(资源获取是初始化).

编辑:(回答编辑到问题中的额外问题).您主要使用RAII(半)自动化资源管理.最明显的用途是在拥有对象超出范围时释放对象拥有的资源,例如释放内存或关闭文件.

  • +1.不幸的是,也有最糟糕的名字的成语. (32认同)
  • 我认为这不是关于C++独有的事情; 相反,它是关于C++中无处不在的事物; 你不可能在不知情的情况下得到的东西,你可能会在其他语言中找到它.RAII肯定会是这样的事情. (4认同)
  • RAII是实现/ release模式/的C++方式. (2认同)
  • C++已经成名,因为内存泄漏不会出现在GC语言中,而内存是迄今为止最明显的资源.不幸的是,这意味着那些不知道这个成语的人在管理数据库连接或套接字等方面遇到了麻烦......在我看来,'using'结构被延迟了,因为它给每个用户带来了负担而不是唯一的类编写者:/ (2认同)

Duc*_*uck 28

这是一个清单.如果我不得不选择一对,我可能会选择奇怪的重复模板模式或虚拟结构.

  • 很棒的清单我经常咨询; 然而,好奇地反复出现的模板在我的列表中会非常低,因为每个C++程序员都需要知道. (2认同)

Dmi*_*try 11

PIMPL,又名P ointer到IMPL ementation?

  • 另一方面,如果没有很长的编译时间,我们中的许多人将无法在StackOverflow上花费尽可能多的时间. (20认同)
  • 我个人很讨厌它.:/ (18认同)
  • 不幸的是,二进制兼容性有时很重要,它是确保它的唯一实用方法. (6认同)
  • 它还显着减少了编译时间(通过减少显式依赖性),并且上帝知道C++程序员如何遭受它! (4认同)
  • 从技术上讲,你没有_have_使用它_anywhere_.:-) (3认同)

dsi*_*cha 8

模板元编程.这很棒,因为它基本上是编译时的鸭子打字,所以你可以通过静态打字的速度获得鸭子打字的大部分灵活性.

  • 鸭子*不能被录音. (9认同)

the*_*ill 7

如果你想充分利用STL,那么迭代器和函子/函数对象就是必不可少的习惯用法.迭代器的使用也隐含地依赖于"半开放范围"的习惯.


jus*_*tin 6

利用强大的打字和const正确性也非常有帮助.

我还禁止默认的复制构造函数和赋值运算符.我实际上超越了这一点,但这些是最常见的.我认为如果他们不隐含生活会更容易.


Bos*_*gan 5

RAII,COW,pimpl,demeter法则(不确定是否可以归类为成语),类型特征和政策.(虽然COW和demeter法不限于C++)