Item 1:將C++視作一系列的語言


Item 1: View C++ as a federation of languages

最初,C++只是C語言加上一些面向對象的特性,所以C++的原名是“C with Classes”。 現在的C++已經逐漸成熟,成為一門多范式的程序設計語言(multiparadigm programming language)。同時支持過程式、面向對象、函數式、泛型編程,以及元編程。

C++的靈活使得它在很多問題上並沒有統一的規則,而是取決於具體的程序設計范式和當前架構的設計意圖。這樣的情況下,我們最好把C++看做是一系列的編程語言,而非一種特定的編程語言。

C++有四種主要的子語言:

  • C。C++是基於C設計的,你可以只使用C++中C的那部分語法。此時你會發現你的程序反映的完全是C的特征:沒有模板、沒有異常、沒有重載。
  • Object-Oriented C++。面向對象程序設計也是C++的設計初衷:構造與析構、封裝與繼承、多態、動態綁定的虛函數。
  • Template C++。這是C++的泛型編程部分,多數程序員很少涉及,但模板在很多情況下仍然很方便。另外模板元編程(template metaprogramming)也是一個新興的程序設計范式,雖然有點非主流。
  • STL。這是一個特殊的模板庫,它的容器、迭代器和算法優雅地結合在一起,只是在使用時你需要遵循它的程序設計慣例。當然你也可以基於其他想法來構建模板庫。

總之C++並非單一的一門語言,它有很多不同的規則集。因而C++可以被視為四種主要子語言的集合,每個子語言都有自己的程序設計慣例。

C++程序設計的慣例並非一成不變,而是取決於你使用C++語言的哪一部分。例如, 在基於C語言的程序設計中,基本類型傳參時傳值比傳引用更有效率。 然而當你接觸Object-Oriented C++時會發現,傳常量指針是更好的選擇。 但是你如果又碰到了STL,其中的迭代器和函數對象都是基於C語言的指針而設計的, 這時又回到了原來的規則:傳值比傳引用更好。

轉載地址:http://harttle.land/2015/07/19/effective-cpp-1.html
感謝作者 Harttle


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com