space
-
hallo,
ist es besser using std::cout oder using namespace std zu schreiben?
wo sind die vor und nachteile und wie machr ihr das
-
using namespace erspart ne menge tipparbeit, allerdings gewähnt man sich daran. Ich benutze eigetnlcih nie using namespace std, und wenn dann auf _keinen_ Fall im Header, sondern erst in der Cpp oder noch besser, in der Funktion, in der ich std wirklcih oft benutze.
Meistens schreib ich überall std:: davor. Was man aber auch machen kann, ist am anfang der cpp folgendes zu schreiben:
uisng std::cout; using std::endl; using std::cerr; using std::string:Damit überführst du nur die angegebenen Objekte und Bezeichnier in der globalen namensraum ein. Ich nehm aber meistens immer std:: davor
-
name1 schrieb:
hallo,
ist es besser using std::cout oder using namespace std zu schreiben?
wo sind die vor und nachteile und wie machr ihr dasIch weiß, dass ich hier mit dieser Meinung in der Minderheit bin, aber:
ich binde generell den gesamten Namensbereich ein, es sei den, es gibt einen triftigen Grund, der dagegen spricht. Dadurch handle ich mir zwar potentiell Namenskonflikte ein, üblicherweise merke ich das aber dann recht schnell und kann dann entsprechend reagieren (indem ich dann eben dort doch nur einzelne Bezeichner qualifiziere).
Ich binde den Namensbereich üblicherweise auch auf der obersten Ebene der Compilereinheit ein, statt lokal. Natürlich wieder mit der Einschränkung, dass das nur geht, solange es keine Probleme bereitet.
Warum mache ich das, wenn es doch zu potentiellen Problemen führt? Weil C++ ohnehin jede Menge syntaktischen Ballast trägt und unnötig schwer zu lesen ist. Ich greife hier nach jeder Vereinfachung, die die Sprache mir bietet. Namensbereiche einzubinden hilft dabei ungemein. Allgemein gilt: Je weniger Code man schreiben muss, desto besser für die Lesbarkeit.
-
Mich stört ein std:: oder boost:: vor einem Bezeichner nicht. Da eine gute Funktion sowieso sehr klein ist verliert man dadurch auch nichts an Übersichtlichkeit.
Falls ich doch mal öfters darauf zugreifen muss nehme ich ein using oder typedef zur Hilfe.
-
Finde ich nicht schrieb:
Mich stört ein std:: oder boost:: vor einem Bezeichner nicht. Da eine gute Funktion sowieso sehr klein ist verliert man dadurch auch nichts an Übersichtlichkeit.
Na, da verwechselst Du Richtlinie mit Realität. Längst nicht jede (gute) Funktion ist klein, und selbst wenn sie das ist, heißt das nicht, dass ihre Zeilen kurz sind. Nehmen wir mal das folgende einfache Beispiel:
std::copy(cont.begin(), cont.end(), std::ostream_iterator<std::string>(std::cout, ",")); // vs. copy(cont.begin(), cont.end(), ostream_iterator<string>(cout, ";"));Und das ist wirklich ein *einfaches* Beispiel, ohne verschachtelte Namensbereiche oder verschachtelte Templates oder sowas, und der Namensbereich-Name ist auch noch kurz.
Ich muss allerdings dazu sagen, dass Argument-dependent lookup hier schon eine große Hilfe ist, wenn man es konsequent einsetzt.