2010-02-26 120 views
9

注:標記爲社區wiki。基本C++習語/技巧

最近幾天,我意識到我對C++瞭解的知之甚少。

除了:

  • 使用STL
  • 實現RAII
  • 實現Ref計數智能指針
  • 寫我自己的基於策略的模板類
  • 運算符重載< <的樂趣

一個好的C++程序員必須知道哪些其他技術?

謝謝!

+1

@anon實施RAII,當然。實現ref-counting智能指針?我希望已經存在的實現足以防止這種需要。 – 2010-02-26 22:19:22

回答

4

我認爲這應該覆蓋它:

More C++ Idioms - Wikibooks

+0

是的,C++成語涵蓋了許多C++工程師應該知道的一些習語,如PImpl,RAII,CRTP,複製和交換。 – baotiao 2015-11-06 09:22:38

4
  • OO設計
  • 異常安全性保證的類型(這是大多數設計模式/成語是基於)。
  • 使用時標準集裝箱
  • 升壓
+0

近年來似乎C++在各個方面已經離開了OO設計...... – einpoklum 2015-09-11 22:46:32

0

(幾乎沒有一個必知,但仍然有用)寫作領域特定語言操作符重載和模板元編程(見Boost.Spirit一個很好的例子) - 但這也是讓你在腳下輕鬆射擊自己的那種東西。

2

前兩個是必須知道的一個好的C++程序員。 「好的C++程序員」不會爲了好玩而重載操作符。

1

基礎:

  • RTTI
  • 虛函數
  • 的shared_ptr等
  • 模板
  • 的Virtu人繼承
  • 複雜的宏

也有用:

  • 屬性(這取決於你的編譯器)
  • 可變參數模板
  • 可變參數功能
  • Constexpr(編譯時間排序/計算字符串的散列等...但後者是關係到最後一節)
  • Lambda表達式

有用的brainfucking或在特殊情況下:

  • CRTP
  • SFINAE
  • inable_if(類型特徵)
  • Foreach宏
  • 用戶定義文字
0

我用來改進我的C++的方式是讀取leveldb的源代碼。因爲leveldb是產品級代碼。所以你可以從真實的產品中學習cpp成語和設計模式。讓我來舉幾個例子

leveldb使用Pimpl成語,幾乎在它的所有頭文件中,比如table.h,table_build.h,write_batch.h。您可以從代碼直接

性LevelDB使用許多OO設計模式,如構建模式學習,桌上有table_build類建表,塊有block_build類構建塊

性LevelDB也使用迭代器模式,迭代器使我們更方便地使用leveldb。

所以我認爲leveldb包含很多習慣用法或C++工程師應該知道的設計模式。