Ecco qui:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
Scrivendolo in questo modo, evitiamo un ADL soggetto a errori insieme all'uso di direttive e dichiarazioni.
Questa dovrebbe essere una risposta sarcastica. :-D
Sono con Herb Sutter su Google su questo. Dagli standard di codifica C ++:
Puoi e dovresti usare lo spazio dei nomi usando dichiarazioni e direttive liberamente nei tuoi file di implementazione dopo le direttive #include e sentirti bene. Nonostante ripetute affermazioni contrarie, lo spazio dei nomi che utilizza dichiarazioni e direttive non è malvagio e non vanifica lo scopo degli spazi dei nomi. Piuttosto, sono ciò che rende utilizzabili gli spazi dei nomi .
Puoi essere ossessionato da potenziali conflitti nello spazio dei nomi che probabilmente non si manifesteranno mai e probabilmente non saranno difficili da risolvere in un evento così astronomicamente raro evitando attentamente le using
direttive e specificando esplicitamente ogni cosa che usi (fino agli operatori) con le using
dichiarazioni, oppure vai avanti e inizia using namespace std
. Raccomando quest'ultimo dal punto di vista della produttività.
La maggior parte dei libri di testo in c ++ insegna ai principianti usando lo spazio dei nomi std; stanno propagando una cattiva pratica di programmazione?
Al contrario, se me lo chiedi, e credo che Sutter sia d'accordo.
Ora, nel corso della mia carriera, ho riscontrato un totale di circa 3 conflitti using
nello spazio dei nomi come risultato diretto delle direttive in basi di codice che coprono decine di milioni di LOC. Tuttavia, in tutti e 3 i casi, erano in file di origine che si estendevano su oltre 50.000 righe di codice legacy, originariamente scritto in C e poi bastardato in C ++, eseguendo un enorme elenco eclettico di funzioni disparate, tra cui intestazioni di una dozzina di librerie diverse, e avendo un elenco epico #includes
che si estendeva su una pagina. Nonostante il caos epico, non sono stati troppo difficili da correggere poiché hanno causato errori di compilazione su OSX (l'unico sistema operativo in cui il codice non è stato creato), non i bug di runtime. Non organizzare il codice in questo modo da incubo e dovresti andare bene.
Detto questo, evita sia le using
direttive che le dichiarazioni nei file di intestazione. È semplicemente ritardato. Ma per i file di origine, e in particolare quelli che non hanno un'intera pagina piena di #include
direttive, direi di non sudare se non lavori per Google.