0

所以我当前的代码如下所示:

static Item fields[] = 
{
{GROUP1, TEXT1},
{GROUP2, 0},
}

现在我需要以这样一种方式进行更改,即仅在满足某些条件时才初始化 GROUP2,否则需要使用 GROUP3 进行初始化。所以我尝试了以下方法:

static Item fields[] = (flagSet)?
{
{GROUP1, TEXT1},
{GROUP2, 0},
} : {
{GROUP1, TEXT1},
{GROUP3, 0},
}

但这没有用。我知道一种方法是使用 #ifdef 宏,但是这个 flagSet 在运行时发生,并且基于此我需要初始化静态数组。另外,由于静态初始化发生在其他任何事情之前,是否有可能做到这一点?

4

1 回答 1

3

有没有办法有条件地初始化全局静态变量?

是的。这些方法与有条件地初始化非全局非静态变量几乎相同。

但是,您不能有条件地初始化数组。您可以使用一些间接性:

static Item fields_true[] {
    {GROUP1, TEXT1},
    {GROUP2, 0},
};

static Item fields_false[] = {
    {GROUP1, TEXT1},
    {GROUP3, 0},
};

static auto& fields =
      flagSet
    ? fields_true
    : fields_false;

或者,您可以有条件地初始化数组元素。由于只有一个元素有区别,因此在这种情况下甚至没有任何重复:

static Item fields[] = {
    {GROUP1, TEXT1},
    {flagSet ? GROUP2 : GROUP3, 0},
};

但是这个标志集发生在运行时

使用运行时输入不是初始化静态对象的选项。您必须在初始化后使用赋值操作修改数组。

于 2021-11-16T09:07:22.827 回答