Почему в шаблонном классе std::numeric_limits
в C ++ есть digits
(и другие), определенные как (статическое постоянное) поле класса, но min()
а также max()
такое методы, так как эти методы просто возвращают буквальное значение?
Заранее спасибо.
Не допускается инициализация нецелой константы (например, с плавающей запятой) в теле класса.
В 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;
}
Других решений пока нет …