C 中獲取內建資料型別最大值 最小值的模板類

2021-08-25 13:27:31 字數 2217 閱讀 6236

昨天使用兩個函式模板來獲取整形數的最大值最小值,但對符點數是不支援的,可以通過模板函式的特化來新增浮點數的值。但是函式呼叫是要消耗cpu時間的,雖然使用inline給了編譯器提示,但只是提示而已,到底什麼情況優化,優化的什麼程度只有編譯器自己知道。而且函式體內的那行**會不會在編譯期就計算出結果,這也完全取決於編譯器。也就是說這兩個函式的效能取決於編譯器,而不被我們自己控制,這有點兒不太好,主動權應該掌握在我們自己手時,今天進行了重構,實現了乙個模板類來解決這些問題,保證程式的效率可控而且高效。當然,這也是要付出代價的,犧牲了幾個位元組的記憶體,用來儲存靜態成員變數,完整實現及測試**如下:

/** work on: visual c++, gcc, ibm xlc++, hp-ux acc++, borland c++

*/

#include

#include

#include

using namespace std;

template

class limit

static inline t getmin(void)

};template

const t limit::max = limit::getmax( );

template

const t limit::min = limit::getmin();

#if !defined(dbl_max)

#if defined(__dbl_max__)

#define dbl_max __dbl_max__

#define dbl_min __dbl_min__

#endif

#endif

#if !defined(flt_max)

#if defined(__flt_max__)

#define flt_max __flt_max__

#define flt_min __flt_min__

#endif

#endif

#if !defined(ldbl_max)

#if defined(__ldbl_max__)

#define ldbl_max __ldbl_max__

#define ldbl_min __ldbl_min__

#endif

#endif

#if defined(flt_min) && defined(flt_max)

template<>

const float limit::min = flt_min;

template<>

const float limit::max = flt_max;

#else

#warning limit does not support double

#endif

#if defined(dbl_min) && defined(dbl_max)

template<>

const double limit::min = dbl_min;

template<>

const double limit::max = dbl_max;

#else

#warning limit does not support double

#endif

#if defined(ldbl_min) && defined(ldbl_max)

template<>

const long double limit::min = ldbl_min;

template<>

const long double limit::max = ldbl_max;

#else

#warning limit does not support long double

#endif

// demos

enum e ;

int main(void)

mysql 資料型別 (最大值 和 最小值)

1 整型 mysql資料型別含義 有符號 tinyint m 1個位元組 範圍 128 127 smallint m 2個位元組 範圍 32768 32767 mediumint m 3個位元組 範圍 8388608 8388607 int m 4個位元組 範圍 2147483648 2147483...

mysql 資料型別 (最大值 和 最小值)

原文 1 整型 mysql資料型別 含義 有符號 tinyint m 1個位元組 範圍 128 127 smallint m 2個位元組 範圍 32768 32767 mediumint m 3個位元組 範圍 8388608 8388607 int m 4個位元組 範圍 2147483648 214...

mysql 資料型別 (最大值 和 最小值)

1 整型 mysql資料型別 含義 有符號 tinyint m 1個位元組 範圍 128 127 smallint m 2個位元組 範圍 32768 32767 mediumint m 3個位元組 範圍 8388608 8388607 int m 4個位元組 範圍 2147483648 214748...