將C 看作多種語言的聯合體

2021-04-13 02:50:32 字數 1803 閱讀 2795

將c++ 看作多種語言的聯合體

起初,c++ 僅僅是增補了物件導向特性的 c 語言。甚至 c++ 原始的名稱都叫做「使用類的c 語言」 ,這可以很明顯地反映出這一繼承關係。

隨著c++ 逐漸成熟,它變得更加豐富多彩,更加大膽前衛,它開始採納一些與 「 使用類的 c 語言」不同的程式設計策略。在構建函式時為達到不同目標, c++ 的發明者為其新增了異常處理機制;模板為設計思想注入了新的活力;同時, stl 使 c++ 達到了前所未有的可擴充套件度。

現在的c++ 是一門多范型程式語言,它包含面向過程、物件導向、函式式程式設計、泛型、元程式設計等等特徵。 c++ 的強大和靈活幾乎是無可比擬的,但這也會造成一些紊亂。所有的 「恰當的用法」的準則似乎都存在例外。那麼我們如何恰當的理解它呢?

最簡單的辦法就是把

c++ 看作乙個有若干門語言組成的聯合體,而不是一門單獨的語言。在乙個特定的子語言中,規則就顯得簡單、直接,而且不易忘記。當更換到另一門子語言時,規則就相應地改變了。為了理解 c++ ,必須認清 c++ 主要的子語言。幸運的是,主要的子語言只有四門:

#c。儘管變革是深刻的,

c++ 仍然基於 c 語言。程式塊、語句、預處理器、內建資料型別、陣列、指標,等等。所有都來自於 c 。在許多情況下, c++ 可以比 c 更優雅地完成一些任務(預處理器的替代方法和使用物件管理資源),但是當我們發現正在使用「c++ 中的c」

這一部分編寫程式時,高效程式設計原則就會反映出 c 語言的侷限:沒有模板、沒有異常處理、沒有過載,等等。

#物件導向的

c++。這一部分的 c++ 就是 「 使用類的 c 語言 」 的一切:類(包括構造器和析構器)、封裝、繼承、多型、虛函式(動態繫結),等等。這一部分的 c++ 是物件導向設計最為直接的應用,即類的規則。

#包含模板的

c++。這是 c++ 中泛型程式設計的一部分,大多數程式設計師在泛型程式設計領域涉足甚淺。模板的概念對 c++ 產生了深遠的影響。模板如此之強大,它足以為我們帶來了乙個全新的程式設計范型:模板元程式設計 (template meta-programming,

簡稱 tmp) 。但是除非對模板到了痴迷的地步,大可不必投入過多精力。主流 c++ 程式設計很少涉及到 tmp 規則。

#stl。顯然地, stl 是乙個模板庫,但是它是乙個非常特別的模板庫。它的約定使得容器、迭代器、演算法、函式物件完美地協同工作,當然模板和庫也可以基於其它的理念來構建。 stl 有自己獨特的解決問題的方法,當我們使用 stl 程式設計時,必須要遵循它的約定。

時刻地對這四門子語言保持頭腦清醒,當高效規則要求我們必須要更改策略,從而必須更改到另一門子語言時,不要大驚小怪。比如說,對內建(比如類似

c 語言的)型別而言,傳值要比通過引用傳遞更高效,但是當我們從「c++ 中的c」

遷移到「物件導向的 c++ 」 後,構造器和析構器的存在就意味著通過引用傳遞給乙個 const 常量會更好。在使用「包含模板的 c++」時通常都是這樣的狀況,因為我們也許根本就不知道當前正在處理的物件的型別。然而當開始使用 stl 時,迭代器和函式物件都是模仿 c 語言中指標的機制,在 stl 的迭代器和函式物件上, c 語言的傳值規則又再次奏效了。

c++ 並不是一門單一的程式語言,它不僅僅擁有一套單一的規則,而是四門子語言的聯合體,每門子語言都有自己的慣例。時刻清醒地分辨這四門子語言,你會發現 c++ 並沒有那麼難。

需要記住的

c++ 的高效程式設計規則根據我們正在使用的 c++ 的那一部分而改變。

c語言 union聯合體

linux中聯合體union實現判斷little endian 和 big endian 大端和小端 1 聯合體的資料成員從低位元組開始對齊 2 little endian 和 big endian。little endian 和 big endian 是 cpu 存放資料的兩種不同順序。對於整型 ...

C語言之聯合體

聯合體,就是將幾種資料型別聯合起來的一種資料結構,但是它們共用乙個空間。怎麼理解呢?川劇變臉見過沒,就是來來回回的變來變去,給人看的眼花繚亂的,但是不管你怎麼變,面具下的臉卻始終不變。同樣的道理,各種資料型別就是各種臉譜,對外展現了不同的形象,唯一不變的就是它的記憶體空間的二進位制資料始終都是一樣的...

C語言聯合體union

c語言中的聯合體union 在c c 程式的編寫中,當多個基本資料型別或復合資料結構要占用同一片記憶體時,我們要使用聯合體 當多種型別,多個物件,多個事物只取其一時 我們姑且通俗地稱其為 n 選1 我們也 可以使用聯合體來發揮其長處。首先看一段 union myun u int k a int ma...