Initialisation de tableau statique d’éléments individuels en C ++

Le code suivant fonctionne avec le compilateur C de GCC, mais pas avec le compilateur C ++. Existe-t-il un “raccourci” pour obtenir le même résultat en C ++?

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

EDIT: Humm, j’ai trouvé ça, clarifie tout. http://eli.thegreenplace.net/2011/02/15/array-initialization-with-enum-indices-in-c-but-not-c/

Cette forme d’initialisation n’est définie que dans la norme C99. Cela ne s’applique pas à C ++. Donc, vous devrez assigner vos éléments un par un:

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

Bien que gcc puisse prendre en charge une sorte d’extension en C ++, il est généralement conseillé d’éviter autant que possible les extensions propres au compilateur et à la plateforme.

Utilisez la syntaxe C ++ standard pour l’initialisation d’un tableau:

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

Ou écrivez une fonction pour initialiser des éléments spécifiques:

 std::array create_initialized_array() { std::array values = { 0 }; values[1] = 1; values[2] = 2; values[9] = 9; return values; } std::array array = create_initialized_array(); 

Ou utilisez une expression lambda:

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