У меня есть 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();
...
}
Редактировать:
Я сделал что-то вроде следующего, и, похоже, сработал, поскольку я могу напечатать значения в верхней части main: Могу ли я что-нибудь сделать, чтобы улучшить или сократить количество кода, чтобы это работало?
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);