Bitte schön:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
Durch diese Schreibweise vermeiden wir fehleranfälliges ADL sowie die Verwendung von Direktiven und Deklarationen.
Dies soll eine sarkastische Antwort sein. :-D
Ich bin mit Herb Sutter über Google in diesem Fall. Aus C ++ - Codierungsstandards:
Sie können und sollten Namespace verwenden, indem Sie Deklarationen und Anweisungen in Ihren Implementierungsdateien großzügig nach # include-Anweisungen einfügen und sich dabei wohlfühlen. Trotz wiederholter gegenteiliger Behauptungen sind Namespaces, die Deklarationen und Anweisungen verwenden, nicht böse und setzen den Zweck von Namespaces nicht außer Kraft. Sie sind vielmehr das, was Namespaces nutzbar macht .
Sie können von potenziellen Namespace-Konflikten besessen sein, die sich wahrscheinlich nie manifestieren werden und in einem solchen astronomisch seltenen Ereignis wahrscheinlich nicht schwer zu beheben sind, indem Sie using
Anweisungen sorgfältig vermeiden und jede einzelne von Ihnen verwendete Funktion (bis auf die Operatoren) explizit mit using
Deklarationen oder angeben mach einfach weiter und fang an using namespace std
. Letzteres empfehle ich aus Sicht der Produktivität.
In den meisten C ++ - Lehrbüchern wird Anfängern die Verwendung des Namespace std beigebracht. verbreiten sie schlechte Codierungspraxis?
Das Gegenteil, wenn Sie mich fragen, und ich glaube, Sutter oben stimmt zu.
Jetzt, im Laufe meiner Karriere, habe ich insgesamt 3 Namespace-Konflikte als direkte Folge von using
Direktiven in Codebasen festgestellt, die sich über Dutzende von Millionen von LOC erstrecken. In allen drei Fällen befanden sie sich jedoch in Quelldateien, die mehr als 50.000 Zeilen Legacy-Code umfassten, ursprünglich in C geschrieben und dann in C ++ bastardisiert wurden und eine umfangreiche eklektische Liste unterschiedlicher Funktionen, einschließlich Header aus einem Dutzend verschiedener Bibliotheken, aufwiesen eine epische Liste von#includes
, die sich über eine Seite erstreckt. Trotz des epischen Durcheinanders waren sie nicht allzu schwierig zu beheben, da sie unter OSX (dem Betriebssystem, auf dem der Code nicht erstellt werden konnte) Buildfehler und keine Laufzeitfehler verursachten. Ordne deinen Code nicht so albtraumhaft an, und es sollte dir gut gehen.
Vermeiden Sie jedoch sowohl using
Direktiven als auch Deklarationen in Header-Dateien. Das ist einfach nur zurückgeblieben. Aber für Quelldateien und insbesondere für solche, bei denen keine ganze Seite mit #include
Direktiven gefüllt ist , würde ich sagen, dass Sie nicht ins Schwitzen kommen, wenn Sie nicht für Google arbeiten.