Итак, у меня есть файл заголовка, полный глобальных переменных. здесь не пример, как реализация выглядит (в файле .cpp):Условный оператор - единственный способ инициализировать глобальные переменные в глобальной области?
extern double event::m_chance = 0.01;
Ничего особенного до сих пор. Но когда мой код стал более сложным, я начал реализовывать #define MASTER_MODE
для тестирования. Так что теперь это выглядит следующим образом:
extern double event::m_chance = MASTER_MODE ? 0.5 : 0.01;
, и я спросил себя: разве это только для инициализации глобальных переменных в глобальном масштабе (с условием)? , так как инструкция if здесь не работает ... Должно быть, правильно?
//declarations
extern double event::m_chance;
if (MASTER_MODE) { //Error: excepted a declaration
event::m_chance = 0.5;
//other variables should be here
}
else { //nope
event::m_chance = 0.01;
//other variables should be here
}
Я просто спрашиваю себя, действительно ли это то, что делают все остальные в моем положении. Или есть nicer (стандарт -defined) способ инициализировать их .. (например, сделать дополнительную функцию и т. Д.).
Спасибо за вашу помощь/советы!
Я хотел бы сделать то же самое, что вы делаете в вашем первом примере. Но если вы хотите изменить переменную или изменить структуру своего кода, вы всегда можете назначить значение по умолчанию '0.01', а do' if (MASTER_MODE) {event :: m_chance = 0.5;} '. Но это изменяет переменную во время выполнения не в препроцессоре – meetaig
Нет, это не единственный способ. Существуют опции, включающие специализацию шаблонов (все версии C++) или (C++ 11 и более поздние) 'constexpr', lambdas и т. Д. И т. Д. – Peter
Соответствует: http://stackoverflow.com/questions/16354575/whys-initializing- a-global-variable-with-return-value-of-a-function-failing-at – Lanting