C++11: Corriger std::initialisation de tableau?

Si j'initialise un std::array comme suit, le compilateur me donne un avertissement manque des accolades

std::array<int, 4> a = {1, 2, 3, 4};

Cela résout le problème:

std::array<int, 4> a = {{1, 2, 3, 4}};

C'est le message d'avertissement:

missing braces around initializer for 'std::array<int, 4u>::value_type [4] {aka int [4]}' [-Wmissing-braces]

Est-ce juste un bug de ma version de gcc, ou est-il intentionnel? Si oui, pourquoi?

  • std::array est un agrégat. Je pense qu'ils peuvent être le faire fonctionner avec un ensemble à l'avenir, cependant.
  • Qu'est-ce exactement, voulez-vous dire par là?
  • Eh bien, vous savez comment vous pouvez avoir struct S {int i; int j;}; et l'initialiser à l'aide de S s = {5, 6};? C'est agrégée d'initialisation. std::array intègre une matrice, ce qui peut être initialisé par l'intermédiaire d'une liste d'initialiseur, qui est ce que l'intérieur est. L'extérieur est pour l'ensemble de l'initialisation.
  • Donc dans mon cas "{1, 2, 3, 4}" est juste un std::initializer_list objet qui lui-même doit être placé au sein de l'effectif de l'initialisation de l'appareil?
  • Eh bien, je ne suis pas trop sûr de comment construit-dans la gamme de l'initialiseur listes sont traitées après l'introduction de ce type, mais c'est l'essentiel, oui. Pour la classe, et l'autre est pour le tableau à l'intérieur de la classe.
  • Un C-array est un agrégat par définition. Étant donné que std::array<> est un aggreate aussi, la première accolade initialise le std::arrat<>, et la deuxième initialise l'intérieur C-tableau.
  • dup stackoverflow.com/q/8863319/981959 dup stackoverflow.com/q/11400090/981959
  • Double Possible de Quand peut-externe accolades être omis dans un initialiseur de la liste?

InformationsquelleAutor Byzantian | 2013-01-06