Ich habe gerade Is it possible to initialise an array in C++ 11 by using new operator gelesen und verstanden, aber es löst mein Problem nicht ganz.Ist es möglich, ein Array von Nicht-POD mit einer neuen Operator- und Initialisierungssyntax zu initialisieren?
Dieser Code gibt mir einen Compiler-Fehler in Clang:
struct A
{
A(int first, int second) {}
};
void myFunc()
{
new A[1] {{1, 2}};
}
ich erwartet hatte {{1, 2}} das Array mit einem einzelnen Element zu initialisieren, die wiederum mit den Konstruktor args initialisiert {1, 2 }, aber ich bekomme diesen Fehler:
error: no matching constructor for initialization of 'A'
new A[1] {{1, 2}};
^
note: candidate constructor not viable: requires 2 arguments, but 0 were provided
A(int first, int second) {}
^
note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided
struct A
^
Warum funktioniert diese Syntax nicht?
Weil 'A' keine Initialisiererliste als einzigen Parameter für seinen Konstruktor akzeptiert. '{1, 2}' ist eine 'std :: initialiser_list',' (1,2) 'sind zwei separate Parameter, sie sind sehr unterschiedliche Dinge. – arman
FYI, g ++ 4.9 akzeptiert dieses Programm. – dyp
@Arman '{1, 2}' ist eine * Klammer-Init-Liste *. Braced-Init-Listen müssen nicht die Konstruktoren "initializer_list" aufrufen. Braced-Init-Listen sind allgemeiner, sie sind Teil einer * einheitlichen Initialisierung *. – dyp