Dopo essere stato morso da fare qualcosa di simile:Evitare/guardia di sé l'inizializzazione del C++ membri
struct Person {
std::string first_name;
std::string last_name;
Person(const std::string &first_name_, const std::string &last_name_) :
first_name(first_name_),
last_name(last_name)
{}
};
Qualora l'inizializzazione last_name(last_name)
dovrebbe ovviamente essere last_name(last_name_)
sono là tutto il senso che posso fare gcc mettere in guardia circa un errore del genere (c'è mai qualche caso d'uso di inizializzare un utente che usa se stesso?)
O qualsiasi suggerimento su una migliore convenzione di denominazione nei casi in cui gli argomenti del costruttore sono simili ai campi.
La convenzione più diffusa è far precedere membri con la lettera "m" (utente) o "f" (campo). Come "mLastName" o "m_last_name". Questo è utile non solo a causa di questo problema specifico, ma anche perché immediatamente sai che qualcosa è una variabile membro se ha il prefisso. È anche meno probabile che si sbagli; il suffisso "_" consente comunque il completamento automatico per suggerire sia l'argomento che il membro. Con un prefisso questo non succede spesso. –
@NikosC. quando ho iniziato a programmare l'avrei usato dappertutto, insieme ad altri tipi di notazione ungherese come m_pfnFoo per i puntatori di funzioni, ecc. Poi, come esperimento, ho deciso di liberarmene e non l'ho mai perso. Ho l'impressione che quando le tue classi sono create con cura non offre alcun vantaggio. – stijn
@stijn Trovo molto utile specialmente quando si legge il codice di altre persone. Rende un po 'più facile capirlo. Mi fa usare meno spesso la funzionalità di ricerca del mio IDE, che è una buona cosa :) –