2009-09-14 8 views

risposta

8

Non utilizzare il prefisso di sottolineatura. E 'riservato alla realizzazione secondo il C++ standard di 17.4.3.1.2/1:

certi insiemi di nomi e le firme delle funzioni sono sempre riservati alla realizzazione:

  • Ogni nome che contiene un doppio carattere di sottolineatura (_ _) o inizia con un trattino basso seguito da una lettera maiuscola (2.11) è riservato all'implementazione per qualsiasi utilizzo.
  • Ogni nome che inizia con un carattere di sottolineatura è riservato all'implementazione da utilizzare come nome nello spazio dei nomi globale.

Si potrebbe dare un'occhiata su Google C++ coding style.

+1

Singoli caratteri di sottolineatura sono riservati solo nello * spazio dei nomi globale *. Detto questo, preferisco m_ per il codice C++. –

+0

No, sono riservati all'implementazione. E l'implementazione li usa nello spazio dei nomi globale. –

+2

E così inizia la formattazione delle guerre ... Sono d'accordo con circa 1/2 delle linee guida del codice google. Gli altri 1/2 sono errati IMO. Il miglior consiglio in quella pagina è "Usa il buon senso e ESSERE COERENTE". – Glen

1

Personalmente mi sento di raccomandare di iniziare variabili membro con m_ e il metodo di accesso con get e set prefissi, ad es .: m_age e int getAge() {}.

Per una buona regola di convenzioni di denominazione e best practice leggere questi due libri:

http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1/187-8545911-6271721?ie=UTF8&s=books&qid=1252936825&sr=8-1 (stile di programmazione generale)

http://www.amazon.com/Coding-Standards-Rules-Guidelines-Practices/dp/0321113586/ref=sr_1_1/177-5450861-2480140?ie=UTF8&s=books&qid=1252936836&sr=8-1 (C++ specifico)

0

Questo è veramente diverso da persona a persona. Personalmente scelgo "int _age" con "getAge()" e "setAge (...)". È abbastanza comune usare nomi con verbi per i metodi per avere un'idea di ciò che fa. Basta chiamare un metodo "age" potrebbe essere un po 'diffuso. Ma ancora, è tutto incentrato sul gusto.

0

Depends. Io preferisco usare:
_age per i campi
getAge e setAge per metodi di accesso
E 'semplicemente una questione di stile ... ma se si antepone i vostri metodi di accesso con get/set, poi il codice sarà più chiaro (I' Supponendo che tu stia lavorando in C++)

3

Mi raccomando contro il trattino principale. Quelli che stai usando sono legali, ma dal momento che alcuni nomi che iniziano con caratteri di sottolineatura sono riservati per l'implementazione preferisco evitarli del tutto.

Dove sono, usiamo m_, come m_age, per rappresentare membri. Funziona piuttosto bene.

Inoltre, hai l'impressione che dovresti disporre di accessor per tutti i membri della classe? Le funzioni pubbliche dovrebbero esporre il comportamento della classe, non i membri della classe.

11

Due cose:

1) Evitare di utilizzare il trattino di sottolineatura principale. La convenzione generale è che i produttori di compilatori usano sia un underscore che un doppio underscore come mezzo per introdurre parole chiave. Ad esempio, ___declspec in Microsoft Visual C++. Questo è il motivo per cui vedi la sottolineatura finale (ad esempio, int foo_;) in una letteratura C++.

2) Non c'è risposta alla tua domanda. Mi dispiace essere scortese. La comunità C++ non è come le altre comunità in questo senso. Sun ha stabilito uno standard di stile per Java. Microsoft ha documentato uno standard di stile nel MSDN per C#. Altre comunità tendono a seguire lo stile dell'autore dei linguaggi di programmazione. "Come fa Van Rossum a scrivere Python?" o "Come fa Matz a scrivere Ruby?" Non lo vedi in C++. Sebbene ci sia uno stile definitivo nei libri di Stroustrup, nessuno lo segue. Anche le figure C++ più importanti hanno tutte un proprio stile.

L'unico consiglio che posso offrire è di essere coerente. Non importa quale stile scegli.

(Nota: questo proviene da una persona con disturbo ossessivo compulsivo. Posso capire il dolore di non avere una risposta definitiva su questo argomento, tuttavia, più invecchio, più imparo a lasciare andare la questione.)

Problemi correlati