Gli spazi dei nomi (namespace) sono progettati per organizzare il codice e prevenire conflitti di nomi (soprattutto in progetti e librerie di grandi dimensioni). Gli spazi dei nomi normali permettono di raggruppare classi, funzioni, variabili, ecc.
Gli spazi dei nomi anonimi (namespace { ... }) vengono utilizzati per limitare la visibilità all'interno di un singolo file: tutto ciò che viene dichiarato in essi non è visibile al di fuori del file. In passato, per questo si usava il modificatore static per funzioni e variabili a livello di file, ma ora è preferibile l'uso di spazi dei nomi anonimi.
// In mylib.cpp namespace { void helper() { // ... } int hidden_var = 42; }
Si può considerare che la dichiarazione di una funzione/variabile con static a livello di file e in uno spazio dei nomi anonimo porti sempre allo stesso effetto?
Risposta:
No, ci sono differenze. static limita la visibilità solo al file attuale. Gli oggetti all'interno di uno spazio dei nomi anonimo hanno la stessa visibilità locale, ma ricevono un nome unico per ogni file di compilazione, il che previene conflitti di nomi tra unità di traduzione. Inoltre, gli spazi dei nomi anonimi supportano la nidificazione e possono contenere classi, mentre static no.
Storia
Storia
Storia