Perché gcc lancia un hissy fit se l'ordine dell'elenco di inizializzazione non corrisponde all'ordine delle variabili nella classe?Perché l'ordine di elenco inizializzatore deve corrispondere all'ordine di dichiarazione membro membro?
class myClass
{
public:
int A;
int B;
myClass();
};
myClass::myClass() :
B(1),
A(2)
{}
si traducono in:
file.h:274: warning: 'myClass::A' will be initialized after
file.h:273: warning: 'int myClass::B
file.cpp:581: warning: when initialized here
v'è alcuna ragione specifica per cui viene emesso questo tipo di avvertimento? Ci sono dei rischi associati all'inizializzazione delle variabili di una classe in ordine diverso da come sono definiti all'interno della classe?
(nota, c'è a question che tocca l'argomento, ma le risposte sono più o meno "perché dovrebbe essere così", senza dare alcuna spiegazione razionale per perché dovrebbe essere ordinato, o che cosa c'è di sbagliato con questo essere fuori order - Mi piacerebbe sapere perché esiste una restrizione del genere - qualcuno potrebbe dare un esempio in cui potrebbe ritorcersi contro?)
@ShafikYaghmour: La norma non costituiscono restrizioni in quanto tale è un capriccio della sua scrittori. Ogni restrizione è il risultato di alcune considerazioni. Quindi, no, "perché lo standard dice così" non è una risposta sufficiente, di gran lunga. Certo alcune decisioni dello standard potrebbero essere discutibili o completamente errate - ma anche questi problemi ed errori derivano da certe origini. –
Quindi forse la tua domanda dovrebbe essere "Perché l'ordine di inizializzazione è l'ordine della dichiarazione?" invece di chiedere informazioni sull'avviso. – dyp
_ "C'è qualche ragione specifica per cui viene emesso questo tipo di avviso?" _ -Una ragione è di aiutarti. –