編譯期就是編譯器進行編譯,產生.obj檔案的所處的那一段時間(如果是廣義的編譯期,那麼一般還包括了鏈結期,因為現在很多編譯器都會自動呼叫鏈結器進行鏈結)
執行期就是你執行某個已經鏈結好的程式的那段時間。
簡單點說 :
「編譯期」就是你在vs2008中按f7開始到 build success 這段時間
「執行期」就是你在vs2008中按ctrl+f5並提供相應的引數到結果出來這段時間。
如何實現
模板元程式設計使用靜態c++語言成分,程式設計風格類似於函式式程式設計( 函式式程式設計是一種程式設計模型,他將計算機運算看做是數學中函式的計算,並且避免了狀態以及變數的概念。 ),在模板元程式設計中,主要操作整型(包括布林型別、字元型別、整數型別)常量和型別,不可以使用變數、賦值語句和迭代結構等。被操縱的實體也稱為元資料(metadata),所有元資料均可作為模板引數。 由於在模板元程式設計中不可以使用變數,我們只能使用typedef名字和整型常量。它們分別採用乙個型別和整數值進行初始化,之後不能再賦予新的型別或數值。如果需要新的型別或數值,必須引入新的typedef名字或常量。
語法模擬:
判斷template
struct ifelse
;template
struct ifelse//特化 bool 為 false 的情形
;舉例來說 :
ifelse <(1+1 == 2) , char , int >::typeresult result; //typeresult == char ……
分支判斷
template struct if; //宣告乙個模版類
template <>
struct if//特化 bool 為 false 的情形
}; template <>
struct if//特化 bool 為 true 的情形
};switch 實現
template
struct ifelse
; template
struct ifelse
; const int c_switch_default = -1;
struct nullcase {};
template < int _tag , typename _type , typename _next = nullcase>
struct case
; typedef _type type;
typedef _next next;
};template
struct switch
; public: typedef typename ifelse::result>::typeresult result; };
template
struct switch
;struct a
; template <> struct sum<0> ;
示例2:二進位制換算十進位制
template
struct bin
; template <>
struct bin<0>
;如果有人看, 我還會堅持寫下去
模板元程式設計 編譯期計算數值
比較早之前在論壇上看到乙個帖子,就是輸出 4在記憶體中的表示形式。這是我寫的解答 還有個比較困難的問題,就是如何在編譯器拼出乙個字串?反正我是想了很久都沒有不知道怎麼解決這個問題。include pragma pack push pragma pack 1 template struct data ...
無法編譯 C 編譯期多型與執行期多型
今日的c 不再是個單純的 帶類的c 語言,它已經發展成為乙個多種次語言所組成的語言集合,其中泛型程式設計與基於它的stl是c 發展中最為出彩的那部分。在物件導向c 程式設計中,多型是oo三大特性之一,這種多型稱為執行期多型,也稱為動態多型 在泛型程式設計中,多型基於template 模板 的具現化與...
編譯期assert函式
編譯期assert函式的目的在於當條件不滿足時,阻止編譯,從而防止錯誤的邏輯通過編輯。而執行期assert的目的在於執行時發現條件不滿足時,產生乙個debug事件 debugbreak 從而讓偵錯程式停下來方便使用者檢查原因。需求描述 有些比較關係,我們期望在編譯期就能確保正確,需求情形 比如a,b...