12

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

提前致谢。

4

1 回答 1

7

不允许在类主体中初始化非整数常量(例如:浮点)。在 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;
}
于 2013-10-31T14:48:46.063 回答