Risposta aggiornata in base alla domanda aggiornata
Va bene a using namespace std
in *.cpp
file.
Va bene a using namespace std
all'interno dei corpi delle funzioni.
Motivo: in entrambi i casi, non sono contagiosi. Contagiosità è l'unica ragione per cui non dovrebbero essere usati al livello di spazio dei nomi globale nei file di intestazione.
I progetti C ++ a file singolo (con un solo file *.cpp
, senza intestazioni, ad esempio in puzzle di programmazione e programmazione competitiva) possono usarli liberamente.
Risposta originale
L'unica regola complessa con using namespace std;
in C ++ è questa:
- Non inserire questo in un file di intestazione, se questo file di intestazione deve essere incluso da più file di origine
(*.cpp)
.
Oltre a questo, suggerisco di adottare un approccio pragmatico:
- Consenti l'importazione di spazi dei nomi a condizione che non provochi un avviso / ambiguità / conflitto del compilatore.
Questo fa sorgere la domanda: qual è il vero vantaggio di avere spazi dei nomi? La semplice risposta è disambiguazione. Ma disambiguazione per chi è in vantaggio?
-
Disambiguazione per i programmatori?
- Questo è un vantaggio relativamente minore, perché la maggior parte dei programmatori è già abituata alla programmazione orientata agli oggetti e la denominazione di oggetti è già sufficiente per raccontare la categoria e lo scopo di tale oggetto.
- Tuttavia, solo l'umano può avere senso dal nome degli oggetti - i computer non possono. (Vedi il prossimo punto sugli strumenti automatici.)
- La mente umana è eccellente nel risolvere l'ambiguità tenendo conto del contesto e della conoscenza del dominio.
-
Disambiguazione per strumenti automatici, come compilatori, generatori automatici di commenti alla documentazione (Javadoc, Doxygen, ecc.) e strumenti di refactoring automatico?
- Direi che questo è un motivo più importante per usare gli spazi dei nomi.
- Inserendo oggetti in spazi dei nomi, gli strumenti automatici possono presentare gruppi di oggetti come interrelati.
- Questo aiuta l'organizzazione gerarchica delle documentazioni di classe, l'applicazione delle regole di visibilità del pacchetto e molte altre cose pulite.
Pertanto, fintanto che non causa un conflitto, sentiti libero di importare spazi dei nomi.