Non penso che tu possa dedurre molto da niente. Ci sono semplicemente troppe possibilità qui per trarre un'inferenza significativa.
Per prima cosa, tieni presente che tutti gli aggregati possono essere inizializzati usando le parentesi:
struct foo {
int x;
long y;
};
// well formed since long before C++ existed:
foo bar = { 1, 2 };
// New syntax
foo baz { 2, 3 };
Quindi, l'unica differenza in questo caso è di lasciare il =
tra il nome della variabile e l'inizializzatore. È abbastanza comodo, ma non significa molto. Questo potrebbe letteralmente essere il caso di voler usare la vecchia sintassi, mancando il =
a causa di un refuso e mai correggendolo / notandolo perché il compilatore non ha dato un messaggio di errore.
Tenendo questo a mente, prendiamo in considerazione i casi in cui una volta dovevi usare i parents anziché le parentesi graffe.
struct abc {
int x;
abc(int x) : x(x) {}
};
Quindi, in C ++ 98/03, abbiamo fatto un'inizializzazione di questo tipo:
abc def(1);
Ora possiamo usare:
abc def = {1};
o
abc def{1};
Ancora una volta, penso che sia del tutto possibile che in un numero ragionevole di casi, il caso abc def = {1};
avvenga interamente per caso. Qualcuno lo ha scritto senza verificare se abc
fosse un aggregato o meno. Un tempo, il compilatore si sarebbe lamentato e l'avrebbero modificato per farlo compilare. Il compilatore non si lamenta più, quindi lo lasciano in pace.
Non fraintendermi: sono a favore di evitare il restringimento delle conversioni 1 . Ma, data la natura umana (e la quantità di C ++ che vedo scritta senza conoscere tutti i dettagli intimi dello standard, per non parlare di tutti i suoi cambiamenti più recenti) penso che ci siano probabilmente un buon numero di casi in cui cose come questa accadono di più o meno per caso, e dal momento che lavorano sono lasciati soli.
1. Sono molto meno entusiasta di tutto ciò che viene interpretato come una lista di inizializzazione se possibile comunque.