Sono sempre stato un bravo ragazzo quando si scrive le mie classi, anteponendo tutte le variabili membro con m_:C++ Constructor lista di inizializzazione stranezza
class Test {
int m_int1;
int m_int2;
public:
Test(int int1, int int2) : m_int1(int1), m_int2(int2) {}
};
int main() {
Test t(10, 20); // Just an example
}
Tuttavia, di recente ho dimenticato di farlo e ha finito per la scrittura:
class Test {
int int1;
int int2;
public:
// Very questionable, but of course I meant to assign ::int1 to this->int1!
Test(int int1, int int2) : int1(int1), int2(int2) {}
};
ci crediate o no, il codice compilato senza errori/avvertenze e le assegnazioni si è svolta in modo corretto! Solo quando ho fatto il controllo finale prima di controllare il mio codice quando ho capito cosa avevo fatto.
La mia domanda è: perché il mio codice compilato? È qualcosa di simile permesso nello standard C++, o è semplicemente il caso che il compilatore sia intelligente? Nel caso ti stavi chiedendo, stavo usando Visual Studio 2008
Mangling i tuoi nomi è difficilmente quello che considererei un "bravo ragazzo". Come hai scoperto, di solito non è necessario, e nelle rare occasioni in cui lo è, abbiamo il prefisso 'this->'. – jalf
Forse una vittima, vedi http://stackoverflow.com/questions/2227244/what-if-a-constructor-parameter-has-the-same-name-as-a-member-variable-in-c – Abhay
@jalf : D'altra parte una qualche specie di indicatore membro-variabile può a volte rendere più facile la lettura del codice (io uso il finale _ quando non rompe la convenzione esistente). –