integral constant定義編譯期常量

2021-08-03 19:20:50 字數 1548 閱讀 8689

#include  "stdafx.h"

#include

#include

using  namespace   std;

/*integral_constant就可方便地定義編譯期常量,而無需再通過enum和static const變數方式,這也為定義編譯期常量提供另一種方法。

integral_constant類 是所有traits類的基類,分別提供了以下功能:

value_type 表示值的型別

value表示值

type 表示自己, 因此可以用::type::value來獲取值

true_type和false_type兩個特化類用來表示bool值型別的traits,很多traits類都需要繼承它們

template

struct integral_constant

_const_fun value_type operator()() const _noexcept

};typedef integral_constanttrue_type;

typedef integral_constantfalse_type;

// alias template bool_constant

template

using bool_constant = integral_constant;

*/template

struct factorial :  integral_constant::value>

;template <>//特化

struct factorial<0> : integral_constant

;int main()

{typedef     integral_constantic;

cout << "value " << ic::value << endl;

cout << "value_type   " << typeid(ic::value_type).name() << endl;

cout << "type  " << typeid(ic::type).name() << endl;

ic   ic;

int   c1 = ic;  //呼叫的operator value_type() 

cout << c1 << endl;

int  c2 = ic();//呼叫的 operator()() 

cout << c1 << endl;

cout << integral_constant::value 非型別模版引數必須是整型或者和整型相容的,  double和float不行

cout << integral_constant::value << endl;

cout << integral_constant::value << endl;

*/cout << true_type::value << endl; 

cout << bool_constant ::value << endl;

cout << factorial<5>::value<

created  by   黃強

編譯期自定義錯誤提示

是不是常常使用assert?是否對你開發過程帶來了便利?void fun tclass p 相信這樣的 不會陌生。但是,有沒有想過,這個assert只能用於執行期,而對於編譯期的錯誤就無能為力了。或者,你比較熟悉boost,對於boost static assert比較熟悉。有沒有想過怎樣實現編譯期...

編譯期assert函式

編譯期assert函式的目的在於當條件不滿足時,阻止編譯,從而防止錯誤的邏輯通過編輯。而執行期assert的目的在於執行時發現條件不滿足時,產生乙個debug事件 debugbreak 從而讓偵錯程式停下來方便使用者檢查原因。需求描述 有些比較關係,我們期望在編譯期就能確保正確,需求情形 比如a,b...

編譯期與執行期

編譯期確切地說應該是得到obj檔案的過程,得到最後可執行檔案的過程叫鏈結 編譯期最前,最後的是執行期。編譯期錯誤是編譯期間就能被編譯器捕捉到的錯誤,譬如定義乙個過大陣列,不過最常見的還是語法錯誤或者拼寫錯誤。執行期錯誤可以也可以是分配乙個過大的陣列,不過在c 裡面這個可以因為new或者malloc產...