2013-10-31 51 views
11

爲什麼在C++中的模板類std::numeric_limits中將digits(和其他)定義爲該類的(靜態常量)字段,但min()max()是方法,因爲這些方法只是返回一個litteral值?C++類中的字段與方法std :: numeric_limits

在此先感謝。

+2

我一直想知道的是我自己,特別是因爲之前'constexpr'一個的出現可能因此不能在模板參數使用'MIN()'和'MAX()'! –

回答

6

不允許初始化非積分常數(例如:浮點數)的一類機構。 在C++ 11的聲明改爲

... 
static constexpr T min() noexcept; 
static constexpr T max() noexcept; 
... 

爲了保持兼容性,以C++ 98的功能被保留,我想。

例子:

struct X { 
    // Illegal in C++98 and C++11 
    // error: ‘constexpr’ needed for in-class initialization 
    //  of static data member ‘const double X::a’ 
    //  of non-integral type 
    //static const double a = 0.1; 

    // C++11 
    static constexpr double b = 0.1; 
}; 

int main() { 
    std::cout << X::b << std::endl; 
    return 0; 
} 
+1

你是什麼意思?「不允許聲明一個非整數常量(例如:浮點數)」? –

+1

在C++ 03中,只能在類體內定義整型常量。儘管如此,沒有什麼能夠阻止你在類體外定義一個浮點常量。 – Simple

+0

@簡單感謝您的澄清。 –