C++11: Korrigieren von std::array-Initialisierung?

Wenn ich initialisieren std::array wie folgt, der compiler gibt mir eine Warnung über fehlende Klammern

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

Dieser behebt das problem:

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

Dies ist die Warnmeldung:

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

Ist das einfach nur ein bug in meiner version von gcc, oder ist es absichtlich getan? Wenn ja, warum?

std::array ist ein Aggregat. Ich denke, Sie könnte es mit einem Satz in die Zukunft, jedoch.
Was genau meinst du damit?
Nun, wissen Sie, wie Sie struct S {int i; int j;}; und initialisieren Sie es mit S s = {5, 6};? Das Aggregat Initialisierung. std::array enthält einen built-in-array, das kann initialisiert werden, über eine Initialisierungsliste, die ist, was die innere festgelegt ist. Die äußeren set ist für Aggregat-Initialisierung.
Also in meinem Fall "{1, 2, 3, 4}" ist nur eine std::initializer_list Objekt, das sich innerhalb der eigentlichen Initialisierung Klammern?
Nun, ich bin nicht allzu sicher, wie built-in-array-Initialisierer-Listen behandelt werden, nachdem die Einführung dieses Typs, aber das ist das wesentliche, ja. Ist für die Klasse, und die andere ist für das array innerhalb der Klasse.

InformationsquelleAutor Byzantian | 2013-01-06

Schreibe einen Kommentar