【发布时间】:2016-09-05 13:21:59
【问题描述】:
好的,所以我有一个充满全局变量的头文件。 这是一个实现的示例(在 .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
}
我只是问自己,这是否是其他人在我的位置上所做的事情。或者是否有一个更好的(标准-定义)方式来初始化它们..(比如制作一个额外的功能等)。
感谢您的帮助/建议!
【问题讨论】:
-
我会做与您在第一个示例中所做的相同的事情。但是,如果您想更改变量或更改代码结构,您始终可以分配默认值
0.01和 doif(MASTER_MODE) { event::m_chance = 0.5;}。但这会在运行时而不是在预处理器中更改变量 -
不,这不是唯一的方法。有涉及模板专业化(所有版本的 C++)或(C++11 及更高版本)
constexpr函数、lambdas 等的选项。
标签: c++ initialization