Для полноты картины, вот версия, которая не требует определения функции, а использует лямбду. В C ++ 17 появилась возможность использовать лямбда-выражения в константных выражениях, поэтому вы можете объявить свой массив constexpr
и использовать лямбда-выражения для его инициализации:
static constexpr auto axis = [] {
std::array<double, num_points> a{};
for (int i = 0; i < num_points; ++i) {
a[i] = 180 + 0.1 * i;
}
return a;
}();
(Обратите внимание на ()
в последней строке, которая сразу вызывает лямбду.)
Если вам не нравится auto
в объявлении axis
, потому что это затрудняет чтение фактического типа, но вы не хотите повторять тип внутри лямбды, вы можете вместо этого сделать:
static constexpr std::array<double, num_points> axis = [] {
auto a = decltype(axis){};
for (int i = 0; i < num_points; ++i) {
a[i] = 180 + 0.1 * i;
}
return a;
}();