昨天使用兩個函式模板來獲取整形數的最大值最小值,但對符點數是不支援的,可以通過模板函式的特化來新增浮點數的值。但是函式呼叫是要消耗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...