C ++中各个元素的静态数组初始化

时间:2012-01-28 21:40:41

标签: c++ c gcc static initialization

以下代码适用于GCC的C编译器,但不适用于C ++编译器。是否有“快捷方式”在C ++中实现相同的结果?

int array[10] = {
    [1] = 1,
    [2] = 2,
    [9] = 9
};

编辑: 嗯,我发现了这一点,澄清了一切。 http://eli.thegreenplace.net/2011/02/15/array-initialization-with-enum-indices-in-c-but-not-c/

2 个答案:

答案 0 :(得分:5)

这种初始化形式仅在C99标准中定义。 适用于C ++。因此,您必须逐个分配元素:

int array[10] = { 0 };
array[1] = 1;
array[2] = 2;
array[9] = 9;

答案 1 :(得分:3)

虽然gcc可能支持某种对C ++的扩展,但通常建议尽可能避免使用特定于编译器和平台的扩展。

使用标准C ++语法进行数组初始化:

int array[10] = { 0, 1, 2, 0, 0, 0, 0, 0, 0, 9 };

或编写一个函数来执行特定元素的初始化:

std::array<int, 10> create_initialized_array()
{
    std::array<int, 10> values = { 0 };
    values[1] = 1;
    values[2] = 2;
    values[9] = 9;
    return values;
}

std::array<int, 10> array = create_initialized_array();

或者使用lambda表达式:

std::array<int, 10> array = ([]() -> std::array<int, 10>
{
    std::array<int, 10> values = { 0 };
    values[1] = 1;
    values[2] = 2;
    values[9] = 9;
    return values;
})();