Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Porates

Frischling

  • »Porates« ist der Autor dieses Themas

Beiträge: 32

Beruf: GameDesign Student bei Qantm Institut München, Gründer von DarkMirrorGames

  • Private Nachricht senden

1

02.01.2009, 16:33

Using namespace std; oder std::

Die Überschrift beschreibt auch gleich die Frage.

Mir wurde gesagt das ich mir using namespace std; abgewöhnen soll?
Aus welchem Grund. Möchte ich hier noch Fragen :D
www.darkmirrorgames.de

2

02.01.2009, 16:40

Naja, es können halt Mehrdeutigkeiten auftreten. Wenn man using in einer cpp Datei verwendet, wo man gut den Überblick hat, was alles benutzt wird ist das Risiko gering, aber wenn man es in einer Headerdatei verwendet, gilt das für alle Dateien, die diese Datei inkludieren (ob direkt oder indirekt).

Wenn man den Namespace immer davor schreibt, ist man auf der sicheren Seite, tippt aber mehr. Letztendlich sollte man sich der Risiken bewusst sein und lieber einmal mehr überlegen, ob man using benutzt oder nicht. Aber ich finde es ganz praktisch.
Lieber dumm fragen, als dumm bleiben!

Anonymous

unregistriert

3

02.01.2009, 16:40

Haste aber schön von ul abgeguckt^^:

Zitat

Ein "using namespace" sollte man immer sein lassen, da dies Mehrdeutigkeiten hervorrufen kann, dies ist auch der Grund wieso man es nur lokal (in Source-Dateien) machen sollte oder in einem Funktionsrumpf. Ist sowas in Header-Dateien, wird dieses "using namespace" überall "weitervererbt" in andere Dateien was Folgefehler hervorrufen kann/wird.

Porates

Frischling

  • »Porates« ist der Autor dieses Themas

Beiträge: 32

Beruf: GameDesign Student bei Qantm Institut München, Gründer von DarkMirrorGames

  • Private Nachricht senden

4

02.01.2009, 16:43

Danke,

na dann werd ich mir wohl mal std:: angewöhnen :)
www.darkmirrorgames.de

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

5

02.01.2009, 17:06

Falls es zu Mehrdeutigkeiten kommt, gibt es einen Compilerfehler!

Wenn man kein using benutzt, haben Namespaces kaum Vorteile gegenüber Präfixen für alle Namen. Namespaces wurden praktisch dafür erfunden, um mit using eingebunden zu werden..

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

hanse

Alter Hase

Beiträge: 472

Wohnort: Wien

  • Private Nachricht senden

6

02.01.2009, 18:26

Imho solltest du dir gar nichts angewöhnen sondern jeweils die Variante verwenden die dir angenehmer erscheint.

7

03.01.2009, 11:43

Zitat von »"Helmut"«

Wenn man kein using benutzt, haben Namespaces kaum Vorteile gegenüber Präfixen für alle Namen. Namespaces wurden praktisch dafür erfunden, um mit using eingebunden zu werden..

Ciao

doch, sie haben vorteile, und wenns nur die Drop-down Liste in vielen IDEs ist^^

und der sinn von Namespaces war das verhindern von Mehrdeutigkeiten und das abgrenzen von Modulen - kann man natürlich auch mit einfachen Präfixen machen, aber ich find namespaces da a) eleganter (ok, subjektiv) und b) spart man sich innerhalb eines namespaces die Präfixe ;)

8

03.01.2009, 16:51

Zitat von »"Helmut"«

Wenn man kein using benutzt, haben Namespaces kaum Vorteile gegenüber Präfixen für alle Namen. Namespaces wurden praktisch dafür erfunden, um mit using eingebunden zu werden..
Sorry, aber das ist einfach falsch, du scheinst die Sache nicht verstanden zu haben. Namespaces sind kein Ersatz für Präfixe, sie dienen zur logischen Gliederung von Klassen und Funktionen. Im Gegensatz zu den C-Präfixen kommen noch zusätzliche Features wie ADNL dazu. Mit dem "Ausleeren" von Namespaces, also massivem Einsatz der using-Direktive, brichst du gerade das Konzept der Namensräume.

Ein Beispiel für den Vorteil von Namensräumen:

C-/C++-Quelltext

1
2
using std::swap;
swap(left, right);

Hier wird geschaut, ob für den Typ von left und right eine freie spezialisierte Funktion existiert, und wenn ja, wird diese angewandt. Falls keine solche Funktion existiert, wird das Funktionstemplate std::swap für diesen Typ instanziiert und aufgerufen.

Namespaces sind im Gegensatz zu Präfixen austauschbar, man ist mit ihnen grundsätzlich flexibler. Man kann Namensräume hierarchisch gliedern. Zudem gibt es noch anonyme Namensräume etc...

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

9

03.01.2009, 18:17

Zitat von »"Nexus"«

Zitat von »"Helmut"«

Wenn man kein using benutzt, haben Namespaces kaum Vorteile gegenüber Präfixen für alle Namen. Namespaces wurden praktisch dafür erfunden, um mit using eingebunden zu werden..
Sorry, aber das ist einfach falsch, du scheinst die Sache nicht verstanden zu haben. Namespaces sind kein Ersatz für Präfixe, sie dienen zur logischen Gliederung von Klassen und Funktionen. Im Gegensatz zu den C-Präfixen kommen noch zusätzliche Features wie ADNL dazu. Mit dem "Ausleeren" von Namespaces, also massivem Einsatz der using-Direktive, brichst du gerade das Konzept der Namensräume.

Ein Beispiel für den Vorteil von Namensräumen:

C-/C++-Quelltext

1
2
using std::swap;
swap(left, right);

Hier wird geschaut, ob für den Typ von left und right eine freie spezialisierte Funktion existiert, und wenn ja, wird diese angewandt. Falls keine solche Funktion existiert, wird das Funktionstemplate std::swap für diesen Typ instanziiert und aufgerufen.

Wenn du kein using benutzt hast du diesen Vorteil nicht. Ich glaube mehr wollte Helmut damit nicht sagen.

Man sollte es auf jeden Fall vermeiden komplette namespaces per using in Headern einzubinden, das wurde ja schon mehrmals gesagt.
Aber alles weitere muss denke ich jeder selbst wissen. Es spricht z.B. eigentlich nichts dagegen "using namespace std;" in einer eigenen Source Datei zu benutzen. Es spart Tipparbeit und Namenskonflikte sind behebbar, falls diese überhaupt auftreten.

10

03.01.2009, 19:03

Zitat von »"xardias"«

Wenn du kein using benutzt hast du diesen Vorteil nicht. Ich glaube mehr wollte Helmut damit nicht sagen.
So, wie er es formuliert hat (besonders sein zweiter Satz), habe ich das anders verstanden, nämlich dass er sich nur auf using namespace ... bezieht.

Werbeanzeige