Hallo, Ich bin vor kurzem von C in C++ umgestiegen und habe folgende Frage: Was hat es mit diesem "using namespace std" oder besser wozu braucht man es? Wenn ich es nicht angebe, meldet mein Compiler einen Fehler. Bin für jede Hilfe dankbar! Gruss Daniel -- clusterix.perl@gmx.de
Daniel Feist schrieb:
Ich bin vor kurzem von C in C++ umgestiegen und habe folgende Frage:
Was hat es mit diesem "using namespace std" oder besser wozu braucht man es? Wenn ich es nicht angebe, meldet mein Compiler einen Fehler. Bin für jede Hilfe dankbar!
Mit using namespace wird angegeben, welcher Namensraum standardmäßig verwendet werden soll (nämlich std). Ohne diese Direktive müsstest Du den Klassen aus diesem Namensraum jedesmal std:: voranstellen. -- Gruß, Alex
Daniel Feist
Ich bin vor kurzem von C in C++ umgestiegen und habe folgende Frage:
Dann solltest du dir schleunigst gute Literatur zu dem Thema beschaffen :)
Was hat es mit diesem "using namespace std" oder besser wozu braucht man es? Wenn ich es nicht angebe, meldet mein Compiler einen Fehler. Bin für jede Hilfe dankbar!
Namespaces bilden einen Namensraum. Damit können Funktionen etc. den gleichen Namen haben, wenn sie in unterschiedlichen Namensräumen liegen. Alle Klassen, Funktionen, Konstanten etc. der Standard C++ Bibliotheken liegen im namespace std. Wenn du also darauf zugreifst, musst du entweder dem Namen immer ein std:: voranstellen, einzelne Namen in den globalen Namensraum ziehen (z.B. 'using std::string;') oder aber eben alle Namen des namespace std in den globalen namespace stellen (durch besagtes 'using namespace std;'). In einem Header sollte *niemals* ein globales 'using namespace xy' stehen, denn man weiss nie, wo der Header verwendet wird. Dort sollte der Namensraum *immer* explizit angegeben werden, also z.B. std::ostream. Im normalen Code sollte IMO auch nie ein globales 'using namespace std;' stehen, aber da liegen die Ansichten unter Programmierern schon deutlich auseinander. Philipp
Moin Phillip, Am Monday 12 January 2004 02:32 schrieb Philipp Thomas:
Daniel Feist
[So, 11 Jan 2004 21:19:28]:
[...]
Was hat es mit diesem "using namespace std" oder besser wozu braucht man es? Wenn ich es nicht angebe, meldet mein Compiler einen Fehler. Bin für jede Hilfe dankbar!
[...]
In einem Header sollte *niemals* ein globales 'using namespace xy' stehen, denn man weiss nie, wo der Header verwendet wird. Dort sollte der Namensraum *immer* explizit angegeben werden, also z.B. std::ostream.
Im normalen Code sollte IMO auch nie ein globales 'using namespace std;' stehen, aber da liegen die Ansichten unter Programmierern schon deutlich auseinander.
Warum sollte "normaler" Code nicht "using namespace std" benutzen? Gibt es dafür auch Gründe? Grüsse Andre
On Mon, 2004-01-12 at 08:37, Andre Heine wrote:
Moin Phillip,
Am Monday 12 January 2004 02:32 schrieb Philipp Thomas:
Daniel Feist
[So, 11 Jan 2004 21:19:28]: [...]
Was hat es mit diesem "using namespace std" oder besser wozu braucht man es? Wenn ich es nicht angebe, meldet mein Compiler einen Fehler. Bin für jede Hilfe dankbar!
[...]
In einem Header sollte *niemals* ein globales 'using namespace xy' stehen, denn man weiss nie, wo der Header verwendet wird. Dort sollte der Namensraum *immer* explizit angegeben werden, also z.B. std::ostream.
Im normalen Code sollte IMO auch nie ein globales 'using namespace std;' stehen, aber da liegen die Ansichten unter Programmierern schon deutlich auseinander.
Warum sollte "normaler" Code nicht "using namespace std" benutzen?
Gibt es dafür auch Gründe? Mehrdeutigkeit, Lesbarkeit.
Ralf
On Sunday 11 January 2004 21:19, Daniel Feist wrote:
Ich bin vor kurzem von C in C++ umgestiegen und habe folgende Frage:
Was hat es mit diesem "using namespace std"
Tu's nicht!
Sinn und Zweck von Namespaces ist es, genau das zu vermeiden. Man soll eben
NICHT für alles und jedes stillschweigend davon ausgehen, daß es zur C++
-Standardbibiliothek gehört.
Sauber ist es, explizit anzugeben, was man haben möchte.
Man kann es jedesmal extra tun, aber das ist lästig und macht den Code nicht
gerade leserlicher:
std::string name;
std::string street;
...
Man kann es aber auch einmal pro File deklarieren:
using std::string;
string name;
string street;
Damit gibt man an, daß man generell die Strings aus der C++
-Standardbibliothek benutzt und nicht schlicht und einfach alles.
using namespace std;
ist Schweinkram. Das gibt es eigentlich nur, um alten, kaputten Code am Laufen
zu halten. Für neuen Code sollte man das tunlichst vermeiden.
CU
--
Stefan Hundhammer
Moin moin, Am Monday 12 January 2004 11:15 schrieb Stefan Hundhammer:
On Sunday 11 January 2004 21:19, Daniel Feist wrote:
Ich bin vor kurzem von C in C++ umgestiegen und habe folgende Frage:
Was hat es mit diesem "using namespace std"
Tu's nicht!
Shit, muss ich alles wieder ändern ;(
Sinn und Zweck von Namespaces ist es, genau das zu vermeiden. Man soll eben NICHT für alles und jedes stillschweigend davon ausgehen, daß es zur C++ -Standardbibiliothek gehört.
Grrrr, viele meiner Bücher benutzen das zuhauf' in main()!
using namespace std;
ist Schweinkram. Das gibt es eigentlich nur, um alten, kaputten Code am Laufen zu halten. Für neuen Code sollte man das tunlichst vermeiden.
Bislang habe ich "using namespace std" als feature benutzt, um eben weniger zu tippen. So, ich habe das mal nachgelesen und Ihr habt natürlich Recht! -----C++ Einführung in die professionelle Programmierung, S. 422---- Um Namenskonflikte zu vermeiden, ist es grundsätzlich empfehlenswert, für ein Projekt Namespaces zu definieren und zu benutzen. Besonders wichtig ist dies beim Schreiben von Bibliotheken. Bei der Benutzung sollte die selektive Auswahl wie etwa bei "std::cout" bevorzugt werden. In Header- und Implementierungsdateien für Klassen sollte "using namespace std;" vermieden werden, damit Benutzer dieser Klassen nicht gezwungenermaßen "std erben". In main()- Dateien ist die Verwendung hingegen unproblematisch. --------------------------------------------- Puuuh, da habe ich ja wiedermal Glück, wonaders als in main() benutze ich das nicht. Danke für die Erläuterungen... Andre
participants (7)
-
Alexander Veit
-
Andre Heine
-
Daniel Feist
-
Philipp Thomas
-
Ralf Corsepius
-
Stefan Hundhammer
-
Vinzent Hoefler