Ho appena letto e capito Is it possible to initialise an array in C++ 11 by using new operator, ma non risolve il mio problema.È possibile inizializzare un array di non POD con la sintassi dell'operatore new e initialiser?
Questo codice mi dà un errore di compilazione in Clang:
struct A
{
A(int first, int second) {}
};
void myFunc()
{
new A[1] {{1, 2}};
}
mi aspettavo {{1, 2}} per inizializzare l'array con un unico elemento, a sua volta inizializzato con i args costruttore {1, 2 }, ma ottengo questo errore:
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
^
Perché questa sintassi non funziona?
Perché 'A' non accetta un elenco di inizializzatori come unico parametro del suo costruttore. '{1, 2}' è un 'std :: initializer_list',' (1,2) 'è due parametri separati, sono cose molto diverse. – arman
FYI, g ++ 4.9 accetta questo programma. – dyp
@Arman '{1, 2}' è un * braced-init-list *. Le liste bretelle-init non devono chiamare costruttori 'initializer_list'. Gli elenchi bretelle-init sono più generali, fanno parte dell'inizializzazione * uniforme *. – dyp