Инициализация статического массива отдельных элементов в C ++ - PullRequest
2 голосов
/ 29 января 2012

Следующий код работает с компилятором C GCC, но не с компилятором 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 ]

5 голосов
/ 29 января 2012

Эта форма инициализации определяется только в стандарте C99. не относится к C ++.Итак, вам нужно будет назначить свои элементы один за другим:

int array[10] = { 0 };
array[1] = 1;
array[2] = 2;
array[9] = 9;
3 голосов
/ 29 января 2012

Хотя 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();

Или используйте лямбда-выражение:

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;
})();
...