條款01:視C++爲一個語言聯邦
如何理解C++語言:
最簡單的方法就是將C++視爲由一個相關語言組成的聯邦而非單一的語言.四個次語言組成了C++這門聯邦語言
C++ 的四個次語言
- C : 說到底C++仍是以C爲基礎區塊,語句,預處理器,內置數據類型
- Object-Oriented C++ :面向對象 , class,封裝,繼承,多態度,虛函數… 這一部分則是面向對象設計的
- Template C++ : 這是C++泛型編程的部分,也是大多程序員經驗最少的部分
- STL: STL是個template程序庫,但它是非常特殊的一個.它對容器,迭代器,算法以及函數對象的規約有極佳的緊密配合與協調.
記住這四個次語言,當你從某個次語言切換到另一個,搞笑編程守則是要求你去改變策略的
例如:
對於內置(C-like)類型而言pass-by-value通常比pass-by-reference搞笑,但是當你從C part of C++
遷移到Object-Oriente C++ (面向對象),由於用戶定義的構造函數和析構函數(導致分配內存)的存在,
pass-by-reference-to-const往往更好.
運用Template C++時尤其更如此,以爲你甚至都不知道你所處理的對象的類型.
然而一旦跨入STL時,你就會了解,迭代器和函數對象都是在C指針之上塑造額,所以對STL的迭代器和函數對象而言,
舊式的pass-by-value守則再次使用
因此C++並不是一個帶有一組守則的一體語言,它是從四個次語言組成的聯邦政府,每個次語言都有自己的規約.記住這四個次語言,你就會發現C==將容易理解很多
注:本文都是根據侯捷老師翻譯的effective c++ 而寫的一些筆記和摘抄的內容