Инициализация статического константного массива в c ++

0

Скажем, у меня есть класс 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, и есть ли более эффективный способ сделать это?

  • 0
    C ++ 11 или C ++ 03? это fn может быть constexpr ?
  • 0
    Как это может быть во время компиляции, если fn должен выполнять взаимодействие с пользователем, сетевой ввод-вывод и генерацию случайных чисел?
Показать ещё 2 комментария
Теги:
const
static-members

1 ответ

1

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

Функция будет вызываться столько раз, сколько есть ее вызовы в списке инициализации.

Также правильное определение массива

const int A::_array[] = {

Ещё вопросы

Сообщество Overcoder
Наверх
Меню