c 編譯期計算 (一)

2022-02-22 07:07:44 字數 1567 閱讀 6753

編譯期就是編譯器進行編譯,產生.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...