oop — поле и метод в классе C ++ std :: numeric_limits

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

Заранее спасибо.

11

Решение

Не допускается инициализация нецелой константы (например, с плавающей запятой) в теле класса.
В 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;
}
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]