Инициализация постоянного статического массива в файле заголовка
Я только что узнал, что следующее недопустимо.
//Header File
class test
{
const static char array[] = { '1', '2', '3' };
};
Где лучше всего инициализировать это?
Ответы
Ответ 1
Лучшее место в исходном файле
// Header file
class test
{
const static char array[];
};
// Source file
const char test::array[] = {'1','2','3'};
Вы можете инициализировать целые типы в объявлении класса, как вы пытались сделать; все остальные типы должны быть инициализированы вне объявления класса и только один раз.
Ответ 2
Вы всегда можете сделать следующее:
class test {
static const char array(int index) {
static const char a[] = {'1','2','3'};
return a[index];
}
};
Пара приятных вещей об этой парадигме:
Ответ 3
//Header File
class test
{
const static char array[];
};
// .cpp
const char test::array[] = { '1', '2', '3' };
Ответ 4
Теперь, в С++ 17, вы можете использовать встроенную переменную
Как работают встроенные переменные?
Простой элемент статических данных (N4424):
struct WithStaticDataMember {
// This is a definition, no outofline definition is required.
static inline constexpr const char *kFoo = "foo bar";
};
В вашем примере:
//Header File
class test
{
inline constexpr static char array[] = { '1', '2', '3' };
};
должен просто работать