#include <array>
struct A
{
A(char value, char another);
const std::array<char, 42> something; // how to init?
}
Рассматриваемые подходы:
const_cast
всегда опасен и часто UBstd::string
беспокоит меня как неэффективное, и это встроенное устройствоstd::experimental::make_array
выглядит многообещающе, но пока не стандартноМожно ли это сделать и как?
@john, это решает. Извините, что беспокою всех: мой мозг не существует.
Используйте список инициализации членов конструктора A
для инициализации массива, например:
A::A(char value) : arr{value} {}
ОБНОВЛЕНИЕ: вы отредактировали свой вопрос после того, как я опубликовал этот ответ.
В вашем исходном коде конструктор принимал один char
, а array
содержал 1 char
, поэтому можно было полностью инициализировать array
этим char
.
Теперь в вашем новом коде конструктор занимает 2 char
, но array
содержит 42 char
, поэтому единственный способ полностью инициализировать array
любыми значениями, кроме нулей, требует использования вспомогательной функции, которая возвращает заполненный array
, например:
std::array<char, 42> makeArr(char value) {
std::array<char, 42> temp;
temp.fill(value);
return temp;
}
A::A(char value, char another) : arr{makeArr(value)} {}
Вот обман, покрывающий это: stackoverflow.com/a/14495926/12002570
makeArr может быть constexpr (без изменений в C++20, замените fill на цикл for перед C++20)
Не уверен, что не так с обычным способом, используя список инициализаторов.
A(char value) : a{{value}} {}