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

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

31

04.01.2009, 15:06

Zitat von »"PCShadow"«

Zitat von »"Spiri"«

Von der EMP^^

EMP = Elektromagnetischer Puls ;)
jetz frag mich bitte nicht, warum man Puls und nicht Impuls sagt, oder warum sich das Magazin, das du vermutlich meinst, nach einem benannt hat^^


Ich dachte es wäre vom Evangelischer Mädchen-Pfadfinderbund. :)

*SCNR* :lol:

Anonymous

unregistriert

32

04.01.2009, 15:46

Zitat

ich habe das mal bei www.cplusplus.de gefunde.

Haste bestimmt in deinem eigenen Post gefunden wa...

Anonymous

unregistriert

33

04.01.2009, 15:49

Zitat von »"Coders-Square"«

Zitat

ich habe das mal bei www.cplusplus.de gefunde.

Haste bestimmt in deinem eigenen Post gefunden wa...


Hab' ich das?^^

34

04.01.2009, 15:55

Zitat von »"Helmut"«

Gut, ich habe etwas übertrieben, aber ich muss hier mal Hanse zustimmen. Man sollte genau das machen, was einem effektiv erscheint, auch wenn die allgemeine Meinung ist, dass das schlechter Stil ist. Wenn man nicht selber gemerkt hat, dass eine gewissen Vorgehensweise auch langfristig keine Nachteile bringt, sollte man es ruhig tun.
Ja, da stimme ich dir auch zu. Wenn man lieber Präfixe hat oder ganze Namensräume ausleert, soll man das machen, ist ja auch Geschmackssache. Halt einfach nicht in Header, die andere brauchen. Ich wollte nur zeigen, dass man mit Namensräumen noch einige Möglichkeiten mehr hat als mit einfachen Präfixen.

Zitat von »"Helmut"«

@Nexus
Sorry, aber ich hab keine Ahnung was ADNL ist (Google auch nicht) und dein Beispiel versteh ich auch nicht.
ADNL = argument dependent name lookup (manchmal auch ADL oder Koenig Lookup). Das sagt aus, dass bei Funktionsaufrufen auch in den Namensräumen der Parameter nach Bezeichnern gesucht wird.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
#include <string>

int main()
{
    std::string Text;
    std::fstream Stream;
    
    getline(Stream, Text);   // hier kein std::getline mehr, da erkannt wird, dass

                             // die Parametertypen im Namensraum std sind.

}


Zitat von »"Helmut"«

Aber using namespace bricht nicht das Konzept, Mehrdeutigkeiten werden immer noch erkannt und man kann den Namespace immer noch explizit angeben, um ein Dropdown Feld zu bekommen.
Naja, das Dropdown-Feld ist eigentlich nicht der Hauptgrund für Namespaces. ;)

Es bricht halt insofern das Konzept, als man beim Ausleeren die logische Gliederung verliert. Wenn man das nur lokal macht und keine Namenskonflikte riskiert, ist das kein Problem. Aber es muss bei mehrfachen Namen nicht zwangsläufig zu Compilerfehlern kommen. Wenn man beispielsweise bei Templates eine spezifischere, überladene Funktion hat, wird diese aufgerufen.

Blödes Beispiel, sollte aber das Prinzip verständlich machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
using namespace std;

// swap spezifisch für Zeiger

template <typename T>
void swap(T* left, T* right)
{
    cout << "Dumme Funktion." << endl;
}

int main()
{
    int* a = 0;
    int* b = 0;
    
    swap(a, b);    // Es wird die dumme Funktion aufgerufen. Keine Warnung, kein Fehler.

}


P.S.: Coders-Square, hör doch mal mit diesen ständigen Provokationen und Flamewars auf. So langsam fragt man sich echt ab dir... :roll:

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

35

05.01.2009, 00:00

Ja, eigentlich haben wir doch die gleiche Meinung, ich finde Namespaces auch besser als Präfixe:) Dass man using nicht in öffentlichen Headern benutzen sollte, dürfte selbstverständlich sein.

Der Königsoperator sagt mir schon eher etwas (habs aber nicht als Feature, sondern als fiesen Hack der Sprache in Erinnerung:)) Aber das Prinzip deines Beispiels versteh ich immer noch nicht. Die Tatsache, dass es using benutzt, keinerlei Fehler produziert und funktioniert, wie man es erwartet, spricht doch für mich, nicht für dich?:) (habs compiliert, funzt einwandfrei)

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)

36

05.01.2009, 00:13

Zitat von »"Helmut"«

Aber das Prinzip deines Beispiels versteh ich immer noch nicht. Die Tatsache, dass es using benutzt, keinerlei Fehler produziert und funktioniert, wie man es erwartet, spricht doch für mich, nicht für dich?:) (habs compiliert, funzt einwandfrei)
Meinst du jetzt das swap-Template in meinem letzten Post oder das im vorletzten? ;)

Falls es das im letzten war: Es war wie gesagt ein wenig blödes/nicht sehr praxistaugliches Beispiel. Man kann sich vorstellen, dass die eigene (auf Zeiger spezialisierte Version) sich irgendwo in einem Header befindet, und vielleicht im Namespace xyz. Man weiss nichts von dieser Funktion, und schreibt jetzt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
using namespace std;
using namespace xyz;

int main()
{
    int* ptr1 = ...;
    int* ptr2 = ...;
    swap(ptr1, ptr2);
}
Jetzt erwartet man natürlich, dass das std::swap aufgerufen wird, was aber nicht der Fall ist. Aber eben, swap ist vielleicht nicht gerade das realistischste Beispiel, da es relativ sinnfrei ist, für Zeiger eine spezialisierte Version des Tauschs anzubieten. Aber es ging ja mehr ums Prinzip, also dass mehrere gleiche Bezeichner nicht zwingend zu einem Compilerfehler führen müssen. Das ist allgemein bei Überladung von Funktionen der Fall...

37

09.01.2009, 22:06

Zusammenfassend kann man also sagen, dass Namespaces zur logischen Gliederung dienen und man "using namespace" nur in .cpp Dateien verwenden soll, wobei wir bei dem wären, was Stroustrup sagt.

Werbeanzeige