2014-05-05 3 views
0

При объявлении статического константного массива в моем классе, как этотСтатических константа целочисленных массивов

static const int myArray[] = {1, 2, 3, 999}; 

я получаю сообщение об ошибке, как «В классе инициализатор для статического элемента данных типа сопзЬ Int [] требует constexpr спецификатор». Когда я делаю это так и объявляю это как

static constexpr int myArray[] = {1, 2, 3, 999}; 

это работает. Почему нельзя объявлять статические постоянные массивы? Что мне не хватает?

+4

Можно объявить статические постоянные массивы. Просто невозможно указать инициализатор для них inline. –

ответ

2

Кажется, что есть немного путаницы о декларации и определения/инициализации в этом вопросе.

Прежде чем C++ 11, определение (которое часто включает инициализацию) статического члена должно быть сделано вне класса, за исключением статических констант интегральных или перечисляемых типов. Из Stroustrup's C++ FAQ:

использовать синтаксис инициализации в классе, константа должна быть статической константной интегрального или перечислениями типа инициализируется константным выражением

Даже в этом случае, если требуется определение (например, при принятии адреса статического члена), он должен быть определен вне класса.

C++ 11 вводит constexpr спецификатор для сигнализации компиляции инициализации времени, а также позволяет статические члены должны быть инициализированы в классе, если объявлены constexpr (проверить постоянные статические члены раздел в компетенции static). Он также позволяет инициализировать нестатические элементы, но с более широким значением, in-class.

Смежные вопросы