std::cout oder cout?
-
Hi,
ich habe zwei Bücher zu c-plusplus in dem einen steht nur cout und im anderen std::cout! Was ist da der unterschied? Die machen doch beide das gleiche! oder?
Welches ist sinvoller zu nehmen?
Gruß
Humus
-
Es ist das selbe.
Doch mit nur cout musst du dem Compiler sagen, dass er cout in dem Namensraum std suchen soll. Das geht mit Hilfe vonusing namespace std;
.
Bei std::cout sagst du explizit welchen Namensraum (hier std) du benutzen möchtest und brauchst keine using-Direktive.
-
Also ist es sinvoller so zu machen:
using namespace std;
anstadt das jedes mal davor zuschreiben!
In dem einem Buch wo das nicht mit dem std::cout steht ist auch kein namespace deklariert! Aber es geht trotzdem! Warum muss ich dann den namespace deklarieren?
-
wo cout ohne std:: und ohne namespace verwendet wird
sind warscheinlich noch die alten header wie
z.B. <xxxxx.h> eingebunden.gruß elwida
-
Humus schrieb:
In dem einem Buch wo das nicht mit dem std::cout steht ist auch kein namespace deklariert! Aber es geht trotzdem! Warum muss ich dann den namespace deklarieren?
dann hast du wahrscheinlich die falschen (alten) Standardheaderdateien inkludiert.
// Statt #include <iostream.h> // das hier #include <iostream> using namespace std; cout << "test"; // oder #include <iostream> std::cout << "test";
EDIT: zu langsam
-
Humus schrieb:
Also ist es sinvoller so zu machen:
using namespace std;
anstadt das jedes mal davor zuschreiben!
Wobei man noch anmerken sollte, dass es nicht unbedingt immer eine gute Idee ist einen Namensbereich "aufzulösen".
-
MaSTaH schrieb:
Wobei man noch anmerken sollte, dass es nicht unbedingt immer eine gute Idee ist einen Namensbereich "aufzulösen".
Es erspart aber oft sehr viel Tipparbeit.
Man könnte, falls man einen eigenen Namenbereich definiert hat, diesen mit MySpace::func(); dann aufrufen.
-
ChrissiB schrieb:
// Statt #include <iostream.h> // das hier #include <iostream> using namespace std; cout << "test"; // oder #include <iostream> std::cout << "test";
Ich habe immer
#include <iostream.h>
eingebunden!
Danke für die erklärungen!
Gruß
Humus
-
oder using namespace std::cout; ums explizit zu machen; btw, wieso ist es nicht gut den namespace "aufzulösen"? Bei dem Standard wie "using ns std;" ist es doch wohl sicher. Mit was sollte std kollidieren?
-
Ich würde dir noch empfehlen ein aktuelleres Buch zu kaufen.
Man sollte Standard C++ nicht gleich falsch erlernen.
-
warum muss ein Buch, dass iostream.h statt iostream verwendet gleich schlecht sein? Es ist nicht aktuell - aber aktuell impliziert doch noch lange nicht gut.
Seht euch zB volkards C++ Kurs an...
-
@ChrissiB Das stand in meinem ersten Buch so! (Jetzt lerne ich C++)
In dem Buch das ich mir jetzt neu gekauft habe! Steht das so mit dem namespcae drin! Hatte mich internessiert, weil es in dem ersten Buch halt ohne drin stand!Naja jetzt bin ich wieder ein bisschen schlauer!
Gruß
Humus
-
Shade Of Mine schrieb:
warum muss ein Buch, dass iostream.h statt iostream verwendet gleich schlecht sein? Es ist nicht aktuell - aber aktuell impliziert doch noch lange nicht gut.
Seht euch zB volkards C++ Kurs an...
Ich habe nicht gesagt, dass das Buch schlecht ist.
Ich habe nur gesagt, dass er sich ein neueres (nicht besseres) Buch kaufen sollte.
-
ChrissiB schrieb:
Ich habe nicht gesagt, dass das Buch schlecht ist.
Ich habe nur gesagt, dass er sich ein neueres (nicht besseres) Buch kaufen sollte.Und warum Geld fuer ein neues Buch ausgeben? Warum nur wegen iostream.h ein neues Buch kaufen? Was bringt das?
-
Shade Of Mine schrieb:
Und warum Geld fuer ein neues Buch ausgeben? Warum nur wegen iostream.h ein neues Buch kaufen? Was bringt das?
Ich kenne ein Beispiel von meinem Bruder.
Er hat sich ein älteres Buch über C++ gekauft.
Ich habe nun dies gesehen und habe ihm gesagt, er solle iostream verwenden.
Doch auch noch jetzt tippt er oft nur die Beispiele aus dem Buch ab und überlegt nicht, dass er nicht iostream.h verwenden soll.Wenn man aber beim Abtippen mitdenkt, kann man bei dem Buch bleiben und das Geld für neue Bücher sparen.
Es war nur eine Emphelung, kein Befehl etc.
-
Noch was dazu. wenn es um eine Header-Datei geht, ist es im Allgemeinen besser
#include <iostream> using namespace std;
durch
#include <iosfwd> //und explizite Qualifizierung des Namensraums (typedef kann dabei helfen)
zu erzetzen.
-
mausilein schrieb:
Mit was sollte std kollidieren?
Vielleicht nicht unbedingt std, aber andere namespaces sollte man nicht so leichtfertig "öffnen", weil es in einem großen Projekt an dem mehrere Leute beeiligt sind öfters zu Überschneidungen kommen kann. Es kann dir passieren, dass du ewig nach Fehlern suchst, die mit Überschneidungen von Klassennamen zusammen hängen. Klassen die ähnlich heißen haben auch manchmal ähnliche Schnittstellen. So kann es sein, dass fehlerfrei kompiliert wird, aber der Code etwas völlig anderes macht, weil man mit den Namespaces durcheinander gekommen ist. Meiner Meinung nach sollte man using sparsam einsetzen.