Скажем, у меня есть класс A, который содержит статический массив const int, как показано ниже.
class A {
static const int _array[];
static int fn( int n );
}
Функция fn включает очень тяжелые вычисления. И теперь я хочу инициализировать мой статический массив const с помощью функции fn.
Я сделал это следующим образом:
//.cpp file
int A::fn (int n){
....
return ....
}
const A::_array[] = {
fn(0);
fn(1);
fn(2);
...
fn(9);
}
Мой вопрос заключается в том, что инициализация массива во время компиляции? И сколько раз работает fn, если я использую _array [i] в других методах класса? только 10 раз в его инициализации или это зависит от того, сколько раз я использую _array?
EDIT: это был С++ 03, и есть ли более эффективный способ сделать это?
Массив инициализируется во время выполнения. Но он будет инициализирован, прежде чем управление будет передано на главный. он может быть инициализирован во время компиляции, если он и функция будут определены как constexpr
Но такие функции не могут иметь очень тяжелые вычисления.
Функция будет вызываться столько раз, сколько есть ее вызовы в списке инициализации.
Также правильное определение массива
const int A::_array[] = {
fn
может бытьconstexpr
?fn
должен выполнять взаимодействие с пользователем, сетевой ввод-вывод и генерацию случайных чисел?