Nach der Frage std::array c++11 initializer syntax error Es ist nicht zuweisen verspannt Liste erlaubt ist :: Array in einer solchen Art und Weise std:Initializer Syntaxfehler tritt nicht mehr mit std :: array
std::array<int, 10> a = {0,1,2,3,4,5,6,7,8,9};
a = {0}; // error: cannot assign to an array from a braced list
Aber ich kann eigentlich nicht reproduzieren diesen Fehler mehr. Meine GCC-Version ist 4.8.2. Hier ist der Code:
#include <array>
int main() {
std::array<int, 10> a;
a = {1};
return 0;
}
Es kompiliert und führt ohne Fehler.
Also ist die Frage, mache ich hier etwas falsch? Oder gab es Veränderungen, die zu einer solchen Verhaltensänderung führten?
Der Compiler erstellt ein temporäres 'std :: array'-Objekt aus der abgestützten Initialisierungsliste und weist es dann Ihrer' a'-Variablen zu. –
Ja, es ist klar für mich. Aber die Frage wurde absichtlich gestellt, um zu verstehen, was in der Implementierung geändert wurde und warum. – rzhurov
Nichts, es ist nur, dass der Compiler "repariert" wurde. C++ - Compiler sind sehr komplizierte Programme und enthalten wie alle nicht-trivialen Programme Fehler. –