標籤:
Effective C++ Chapter 1. 讓自己習慣C++(Accustoming Yourself to C++) Item 1. 視C++為一個語言聯邦(View C++ as a federation of languages)
將 C++ 視為由四個次語言群組成的語言聯邦,在某個次語言中,各種規則與通例都傾向於簡單、直觀易懂、且容易記住。但從一個次語言移往另一個次語言,規則可能改變。
- C —— C++ 以 C 為基礎。區塊(blocks)、語句(statements)、前置處理器(preprocessor)、內建資料類型(built-in data types)、數組(arrays)、指標(pointers)等統統來自 C 。
- Object-Oriented C++ —— 這部分是 C with Classes 所訴求的: classes(包括建構函式和解構函式)、封裝(encapsulation)、繼承(inheritance)、多態(polymorphism)、virtual 函數(動態綁定)……等等。
- Template C++ —— 這是 C++ 的泛型程式設計(generic programming)部分。
- STL —— STL 是個 template 程式庫,對容器(containers)、迭代器(iterators)、演算法(algorithms)以及函數對象(function objects)的規約有極佳的緊密配合與協調。
不同的次語言有不同的規則,因而採用不用的策略。如對內建(也就是 C-like)類型而言 pass-by-value 通常比 pass-by-reference 高效,但對於 Object-Oriented C++ ,由於使用者自訂建構函式和解構函式的存在,pass-by-reference-to-const 往往更好。運用 Template C++ 時也是如此,因為此時你不知道所處理對象的類型。但一旦跨入 STL,因為迭代器和函數對象都是在 C 指標之上塑造出來的,所以對 STL 的迭代器和函數對象而言,舊式的 C pass-by-value 規則再次適用。
請記住:
- C++ 高效編程規則視狀況而改變,取決於你使用 C++ 的哪一部分。
Effective C++ 之 Item 1: 視C++為一個語言聯邦