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