C ++类std :: numeric_limits中的字段与方法

时间:2013-10-31 14:21:33

标签: c++ oop numeric-limits

为什么在C ++中的模板类std::numeric_limits中,digits(和其他)被定义为类的(静态const)字段,但min()和{{1}是方法,因为这些方法只返回一个litteral值?

提前致谢。

1 个答案:

答案 0 :(得分: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;
}