Ecco qua:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
Scrivendo in questo modo, evitiamo l'ADL soggetta a errori e usiamo direttive e dichiarazioni.
Questa è una risposta sarcastica. :-D
Sono con Herb Sutter su Google su questo. Dagli standard di codifica C ++:
You can and should use namespace using declarations and directives liberally in your implementation files after #include directives and feel good about it. Despite repeated assertions to the contrary, namespace using declarations and directives are not evil and they do not defeat the purpose of namespaces. Rather, they are what make namespaces usable.
Puoi ossessionarti su 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 direttive using
e specificando esplicitamente ogni cosa che usi (fino al operatori) con dichiarazioni using
, o semplicemente andare avanti e avviare using namespace std
. Raccomando quest'ultimo da un punto di vista della produttività.
Most c++ text books teach beginners with using namespace std; are they
propagating poor coding practice?
Il contrario se me lo chiedi, e credo che Sutter sia d'accordo.
Ora, nel corso della mia carriera, ho riscontrato circa 3 conflitti nello spazio dei nomi come risultato diretto di using
di direttive in codebase che coprono decine di milioni di LOC. Tuttavia, in tutti e 3 i casi, si trovavano in file di origine che coprivano oltre 50.000 righe di codice legacy, originariamente scritte in C e poi imbastardite in C ++, che eseguivano un elenco eclettico di funzioni disparate, incluse intestazioni da una dozzina di librerie diverse e un elenco epico di #includes
che si estende su una pagina. Nonostante il pasticcio epico, non erano troppo difficili da sistemare poiché causavano errori di compilazione su OSX (l'unico sistema operativo in cui il codice non è riuscito a creare), non bug di runtime. Non organizzare il tuo codice in questo modo da incubo e dovresti stare bene.
Detto questo, evita entrambe using
di direttive e dichiarazioni nei file di intestazione. È semplicemente ritardato. Ma per i file di origine e in particolare quelli che non hanno una pagina intera piena di direttive #include
, direi di non preoccuparti se non lavori per Google.