C
Shade Of Mine schrieb:
camper schrieb:
Shade Of Mine schrieb:
Gibt es einen Grund warum es so einen ctor nicht gibt?
Weil array ein Aggregat sein soll.
oh, ok.
macht natuerlich sinn.
Wenn man weiter denkt, eigentlich nicht.
array ist ja deshalb als Aggregat eingeführt worden, damit diese Art Initialisierung (auch in C++03) durchgeführt werden kann. Jetzt wäre das an sich nicht mehr erforderlich. Und weil es unterspezifiziert ist, kann man std::array nicht felxibel einsetzen, wenn man portabel bleiben will: es wird nämlich nicht gesagt, wie die vollständige Klammerung auszusehen hat, sondern nur, dass
array<T, N> a = { initializer-list };
funktionieren soll. Dabei findet allerdings mit Sicherheit brace-elision statt, und gerade die ist ja in anderen Kontexten (z.B. Member-Initialisierer) nicht zulässig.
Nur steht eben nirgendwo, dass
array<T, N> a = {{ initializer-list }};
a) möglich und b) die vollstäng geklammerte Variante ist.
Beispielsweise könnte array ja so aussehen
template <typename T, size_t N>
struct array {
...
T elems[1][1][1][N];
};
unsinnig, aber möglich.