Статические константные члены класса

139
01 февраля 2022, 12:50

Не компилируется код:

class Foo
{
private:
    static const double Val = 12.3;
};
int main()
{  
    return 0;
}

Ошибка:

'Foo::Val': a static data member with an in-class initializer must have non-volatile const integral type or be specified as 'inline'

Компилировал в VS 2019 Community со стандартом c++17 и c++14. g++ выдает тоже самое. Насколько Я знаю, начиная с C++11 ограничение на не интегральные типы было снято. В чем проблема?

Answer 1

Стандарт С++17, 11.3.8.2.3.

If a non-volatile non-inline const static data member is of integral or enumeration type, its declaration in the class definition can specify a brace-or-equal-initializer in which every initializer-clause that is an assignment-expression is a constant expression (7.7).

Так что - только интегральные типы.

Но вы можете написать

static constexpr double Val = 12.3;

или

static inline const double Val = 12.3;

и все получится.

"По-моему, так" (с) Пух

READ ALSO
Подключение библиотеки SFML к Visual Studio

Подключение библиотеки SFML к Visual Studio

Как можно подключить библиотеку SFML к Visual Studio таким образом, чтобы не приходилось подключать библиотеку к каждому проекту, а так, чтобы можно...

106
Я пытаюсь создать функцию, которая рисует заданное изображение .bmp в заданном окне

Я пытаюсь создать функцию, которая рисует заданное изображение .bmp в заданном окне

Я понял, что скорее всего проблема либо на стадии создания массива Pixels, то есть я как-то неправильно обращаюсь к элементам динамического массива,...

214
Одномерные массивы;c++

Одномерные массивы;c++

В одномерном массиве, состоящем из п целых элементов, вычислить: 1Номер максимального элемента массива; 2

106
Не могу разобраться с логикой задания

Не могу разобраться с логикой задания

На учёбе выдали вот такое задание:

89