Mi è stato detto da altri che scrivere "usando lo spazio dei nomi std" nel codice è sbagliato, e che invece dovrei usare direttamente "std::cout" e "std::cin".
Perché l'utilizzo dello spazio dei nomi std è considerato una cattiva pratica? È inefficiente o rischia di dichiarare variabili ambigue (variabili che condividono lo stesso nome di una funzione nello spazio dei nomi std
)? Ha un impatto sulle prestazioni?
Questo non è affatto legato alle prestazioni. Ma considerate questo: state usando due librerie chiamate Foo e Bar:
using namespace foo;
using namespace bar;
Tutto funziona bene, e potete chiamare Blah()
da Foo e Quux()
da Bar senza problemi. Ma un giorno si passa ad una nuova versione di Foo 2.0, che ora offre una funzione chiamata Quux()
. Ora avete un conflitto: Sia Foo 2.0 che Bar importano Quux()
nel vostro namespace globale. Questo richiederà un po' di sforzo per essere risolto, specialmente se i parametri della funzione coincidono.
Se aveste usato foo::Blah()
e bar::Quux()
, allora l'introduzione di foo::Quux()
sarebbe stata un non-evento.
Un'altra ragione è la sorpresa.
Se vedo cout << blah
, invece di std::cout << blah
penso: Cos'è questo cout
? È il normale cout
? È qualcosa di speciale?
Si tratta di gestire la complessità. Usare lo spazio dei nomi farà entrare cose che non vuoi, e quindi forse renderà più difficile il debug (dico forse). Usare std:: dappertutto è più difficile da leggere (più testo e tutto il resto).
Cavalli per corsi - gestite la vostra complessità come meglio potete e vi sentite in grado.