C ++ есть функция на время компиляции для вычисления глобальных переменных

У меня есть 3 глобальные переменные, которые я хочу вычислить во время компиляции без необходимости сначала получать результаты и назначать глобальные переменные вручную.

В настоящее время он настроен так, что есть функция с именем Init (), которая просто вычисляет 3 переменные, и эта функция Init () вызывается в верхней части Main.
То, что я пытался сделать, это добавить constexpr в начало функции, но при печати значений до вызова Init () переменные равны 0.

Каков был бы наилучший способ (если он вообще существует), чтобы функция Init () в следующем коде выполнялась во время компиляции и чтобы 3 глобальные переменные уже вычислялись при запуске программы.

Пример кода:

static const int length = 8;
static const int seed = 40;

long long key1, key2, key3; // I want these to be calculated at compile-time instead of run-time if possible

void Init() {
key1 = pow(seed, length);
key2 = key1 * seed;
key3  = key2 * seed;
}

...
void main(int argc,char * argv[]) {
Init();
...
}

Редактировать:

Я сделал что-то вроде следующего, и, похоже, сработал, поскольку я могу распечатать значения в верхней части основного:
Что я могу сделать, чтобы улучшить или сократить объем кода, чтобы это работало?

constexpr long long calcKey1() {
long long key1 = 1;
for (int i = 0; i < length - 2; i++)
key1 *= seed;

return key1;
}

constexpr long long calcKey2(const long long key1) {
return key1* seed;
}

constexpr long long calcKey3(const long long key2) {
return key2 * seed;
}

constexpr long long key1 = calcKey1();
constexpr long long key2 = calcKey2(key1);
constexpr long long key3 = calcKey3(key2);

-1

Решение

То, что вы хотите, это использовать constexpr, Но это не всегда будет работать.

типично std::pow не является constexpr (https://en.cppreference.com/w/cpp/numeric/math/pow).

Если вы действительно хотите иметь вычисления во время компиляции, вам нужно реализовать эти отсутствующие функции как constexpr сам. Действительно, стандартная библиотека обычно не constexpr, так что он все равно будет делать вещи во время выполнения. Посмотри на https://www.youtube.com/watch?v=CRDNPwXDVp0&фраги = пл% 2Cwn для получения дополнительной информации о том, что ждет нас в будущем.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]