C++語言特性

C++ 屬於編譯型語言

開發者撰寫的程式若要執行,原始碼必須經過兩道處理流程。你寫下的程式只是純文字字元,電腦無法直接辨識,必須透過編譯器將這些文字符號轉換成CPU可讀取的指令,也就是機器語言;CPU只能逐行執行這類機器指令。

  1. 編譯:編譯器讀取原始檔,產生目的檔;
  2. 鏈結:鏈結器整合多個目的檔,輸出可執行程式。

一般C++專案由多個原始碼檔案組成,流程示意圖如下:

產生的可執行檔綁定特定硬體與作業系統,無法直接跨平台執行(Mac專案不能直接在Windows電腦開啟)

我們常說C++具備可移植性,指的是原始碼可移植:同一套原始碼,可在不同系統上分別編譯並正常執行。

簡單來說,不是在Windows編譯好的exe檔複製到Mac就能執行;而是將同一組原始文字(.cpp、.h檔)複製到Mac,透過Mac專用的C++編譯器重新編譯,產生Mac適用的執行檔,這才是可移植的含義。

C++ ISO標準

ISO C++標準分為兩大核心模組

  1. 核心語言功能:語言原生內建基礎能力,例如基礎型別char/intfor/while迴圈等。
  2. 標準函式庫元件:官方配套工具集,包含vector/map容器、<<輸出、getline()讀取輸入等IO操作。

整套標準函式庫完全以純C++實作,各大編譯器都內建提供;僅極少數底層場景(執行緒上下文切換)會使用少量機器碼。

為什麼需要標準函式庫?標準函式庫概念類似現今常聽到的SDK,目的是減輕開發者工作量。如果所有基礎功能都要工程師從零開發,這門語言將很難普及。舉例來說,若每個開發者都要自行撰寫「在控制台輸出文字」的程式碼,會造成大量重複勞動。為解決此問題,C++設計者預先寫好完整程式碼、編譯成函式庫(lib)提供開發者直接使用。簡而言之,避免重複造輪子,大幅提升開發效率,吸引更多使用者。

標準函式庫並非依靠特殊語法黑科技實現,本身就是標準C++程式碼,你可以完整閱讀其原始碼、自行擴充同類工具。

C++ 屬於靜態型別語言

所有變數、數值、識別字、運算式,在程式使用位置都必須讓編譯器明確得知其型別;物件的型別直接決定它能支援哪些運算與操作。

靜態型別核心優勢:編譯階段即可完成型別檢查,大量錯誤在撰寫程式時就被編譯器攔截,不會等到程式執行才崩潰,兼顧安全性與執行效能。換句話說,編譯器轉換程式為機器語言時,若偵測到型別不符就會直接報錯。比如把姓名文字存入用來儲存年齡的整數變數,就會觸發錯誤。編譯期錯誤工程師能立刻修正;若是執行期錯誤,軟體已經交付使用者,處理難度會大幅提升。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *