Ответ 1
Эта инструкция устарела: в С++ 03 инициализация с использованием double
в определении класса не поддерживалась. В С++ (начиная с версии 2011) вы можете инициализировать произвольные элементы в определении класса. Кроме того, инициализация не ограничивается членами static
, но вы также можете инициализировать членов static
:
struct foo {
static constexpr double value = 1.23;
std::string str = "foo";
};
Историческая причина запретить инициализацию членов static
, использующих числа с плавающей запятой в С++ 03, заключалась в том, что число во время компиляции может отличаться от числа во время выполнения. Например, когда кросс-компиляция на платформе с использованием плавающих точек IEEE и таргетинг на платформу с использованием шестнадцатеричных поплавков IBM может давать разные результаты даже для констант, представляемых как в числовых системах.