#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產...