Подтвердить что ты не робот

Поле против метода в классе С++ std:: numeric_limits

Почему в классе шаблона std::numeric_limits в С++ есть digits (и другие), определенные как поле (static const) класса, но min() и max() являются методами, поскольку эти методы просто вернуть литерное значение?

Спасибо заранее.

4b9b3361

Ответ 1

Невозможно инициализировать нецелую константу (например, с плавающей запятой) в теле класса. В С++ 11 объявление изменилось на

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

Чтобы сохранить совместимость с С++ 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;
}