Страницы

Поиск по вопросам

среда, 31 октября 2018 г.

Статическая константа

Можно ли объявить с инициализацией static переменную типа double/float и производных внутри класса?
Если да, то каким способом? Если нет, то почему?


Ответ

Вы можете создавать константные статически члены класса со спецификатором constexpr и инициализировать их внутри определения класса.
Например
#include
struct A { static constexpr double d = 10.15; };
constexpr double A::d;
int main() { A a;
std::cout << a.d << std::endl;
return 0; }
Ранее этого нельзя было делать, так как тип double разными компиляторами представлялся по-разному и более того было расхождение между препроцессорами и компиляторами, как они представляют тип double
Вот, что, например, пишет Страуструп в своем предложении по включению в стандарт спецификатора constexpr
Traditionally, evaluation of floating-point constant expression at compile-time is a thorny issue

Комментариев нет:

Отправить комментарий