條款46 寧願編譯和連線時出錯,也不要執行時出錯

2021-08-30 16:07:16 字數 613 閱讀 2130

1,先看乙個例子:

class month

static const month feb()

...static const month dec()

int asint() const // for convenience, make

// it possible to convert

// a month to an int

private:

month(int number): monthnumber(number) {}

month(const month& rhs);

const int monthnumber;

};class date ;

設計理念:

第一:month建構函式私有,可以阻止clients產生新的月份.

第二:每個month object都是const,所以它們不可能被修改.

第三:獲得month object的唯一途徑呼叫函式,不用擔心month object沒有被初始化.

這個例子以"編譯期檢驗"取代了"執行期檢驗".

2,消除所有的執行時期檢驗是不切實際的,儘管如此,將執行時期的檢驗移到編譯期或連線期,還是乙個值得的目標.

條款41 了解隱式介面和編譯期多型

1 簡介 物件導向程式設計總是以顯式介面和執行期多型來解決問題。例如 class widget void doprocessing widget w 2 所謂的顯式介面 由於w的型別被宣告為widget,因此w需要widget介面,並且我們可以在原始碼中找到這個介面,看到原始碼的樣子,所以稱為是顯式...

Linux下面的編譯和連線

編譯和連線 編譯通常是對單個原始檔進行編譯成.o檔案 要加上 c選項,比如 gcc o aa.o c aa.cpp 否則會提示找不到main函式 因為有些模組只是提供單元函式 並沒有main函式 編譯只檢查基本語法,對於引用的外部函式,只用能找到其宣告就可以正確編譯通過,比如在cpp檔案中包含了引用...

程式的連線和編譯過程

連線 linking 是將各種 和資料片段收集並組合稱為乙個單一檔案的過程,這個檔案可被載入 複製 到記憶體並執行。在早期的計算機系統中,連線時手動執行的。在現代系統中,連線是由 叫做聯結器 linker 的程式自動執行的。main.c sum.c 大多數編譯系統提供編譯器驅動程式 compiler...