c ++ как последовательно инициализировать глобальные константные переменные - PullRequest
1 голос
/ 31 марта 2020

У меня проблема с инициализацией глобальных константных переменных:

int a;
const int b = a * a;

int main(int argc, char **argv) {
    a = std::stoi(argv[1]);
    ...
}

Я хотел бы передать значения a и b во время выполнения. Однако приведенный выше код не работает для b. Что мне тогда делать? Спасибо !!!

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Вы не можете, и это реальная проблема при использовании глобальных переменных, поэтому большинство крупных системных разработчиков (должны) отказаться от использования этой функции.

Мой любимый подход:

int get_global_a(int initial_value=0) {
  static int a = initial_value;
  return a;
}

int get_global_b(int a_value=0) {
  static int b = a_value * a_value;
  return b;
}

/* Make sure this is the first line you execute in your program, but not before main! */
void initialize_all_globals(/* all necessary params */) {
    int a = std::stoi(argv[1]);
    get_global_a(a);
    get_global_b(get_global_a());
}
0 голосов
/ 31 марта 2020

Вы можете инициализировать его с помощью состояния c int, как это во время выполнения. Более поздние изменения в переменной приводят к ошибке компиляции:

#include <iostream>

static int hidden_b;
const int& b(hidden_b);

int main(int argc,char** argv) {
    int a = std::stoi(argv[1]);
    hidden_b = a*a;
    std::cout << b << std::endl;
    //b = 3; // compile error

    // problems arise, if you change the hidden variable
    /*hidden_b = 3;
    std::cout << b << std::endl;*/
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...