nomi che iniziano con un underscore seguito da un carattere alfanumerico non-capitale e che non possiedono la doppia sottolineatura sono riservati solo nel namespace globale. La ragione di ciò è che su alcuni sistemi alcuni nomi devono ottenere un trattino di sottolineatura principale o sono già utilizzati dal sistema operativo sottostante e/o dalla sua libreria C. I nomi in uno spazio dei nomi anonimo non hanno questo problema.
Detto questo, mi chiedo sempre perché le persone sono così ansiose di usare nomi brutti! A meno che non sia nella modalità di implementazione della libreria standard (dove effettivamente devo usare nomi brutti per non entrare in conflitto con i nomi degli utenti) mi chiedo sempre se sto facendo qualcosa di sbagliato usando un trattino basso principale in qualsiasi parte del mio codice! Vi sono rare occasioni in cui è necessario un trattino di sottolineatura principale (ad esempio quando si chiama _exit()
o utilizzando i segnaposto di std::bind()
) ma in genere gli utenti non devono toccarli: non li usano né li definiscono.
fonte
2012-01-01 11:18:44
Al MEGLIO, sarebbe davvero una forma davvero scadente se si decidesse di utilizzare i trattini di sottolineatura principali su uno qualsiasi dei nomi delle variabili. – paulsm4
@ paulsm4 Questo è ciò che fa la libreria boost bind per definire i segnaposti degli argomenti ('_1',' _2', ecc ...). – StackedCrooked
Uno spazio dei nomi senza nome non è particolarmente speciale; è solo uno spazio dei nomi ordinario, con nomi univoci con una direttiva implicita che inietta i suoi nomi nello spazio dei nomi che lo racchiude. Tuttavia, vi è una domanda interessante qui: un nome inserito nel namespace globale tramite una direttiva using viola questa regola? –