在C ++中初始化静态const数组的特定元素

时间:2013-10-29 15:04:52

标签: c++ arrays c++11 g++ gnu

我有一些C需要转换为C ++。

它的确是这样的:

enum
{
   ELEM0,
   ELEM1,
   ELEM2,
   ELEM3,
   ELEM4,
   MAX_ELEMS
} 

#define LEN 16

static const char lut[MAX_ELEMS][LEN] =
{
    [ELEM2] = "Two",
    [ELEM3] = "Three",
    [ELEM1] = "One",
    [ELEM4] = "Four",
    [ELEM0] = "Zero"
}

在实践中,我有数百个元素,数组中没有任何顺序。我需要保证数组中的条目将枚举与适当的文本联系起来。

是否可以使用-std = gnu ++ 11中的位置参数初始化数组?

1 个答案:

答案 0 :(得分:3)

没有。每个gcc documentation指定的初始值设定项在GNU C ++中不存在。

  

在ISO C99中,您可以按任何顺序给出元素,指定它们适用的数组索引或结构字段名称,GNU C也允许它作为C89模式的扩展。 此扩展未在GNU C ++中实现。

这不能解决您的问题(虽然它是运行时):

static const std::map<int, std::string> lut =
{
    std::make_pair(ELEM2, "Two"),
    std::make_pair(ELEM3, "Three"),
    std::make_pair(ELEM1, "One"),
};