条件运算符是在全局范围初始化全局变量的唯一方法吗?

时间:2016-09-05 13:22:00

标签: c++ initialization

好的,我有一个充满全局变量的头文件。 这是一个示例,实现如何(在.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
}

我只是问自己这是否是其他人在我的位置所做的事情。或者是否有更好的标准 - 定义)方式来启动它们......(比如制作额外的功能等)。

感谢您的帮助/建议!

2 个答案:

答案 0 :(得分:3)

#ifdef MASTER_MODE

    extern double event::m_chance = 0.5;
    //other variables should be here

#else

    extern double event::m_chance = 0.01;
    //other variables should be here

#endif

答案 1 :(得分:0)

lambda怎么样?

#include <iostream>

bool some_condition = true;

int some_global = [&]()
{
    if (some_condition)
    {
        return 10;
    }
    else
    {
        return 20;
    }
}();

int main() {
    std::cout << some_global;
}