was bedeutet using namespace std;? (C++)

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Manche Sachen sind nunmal redundant. Viele Begriffe, Klassen und co. können doppelt vorkommen. Sowas wie List, User usw. sind sehr beliebte und häufige Namen. Um das Ganze besser Unterscheiden zu können gibt es eben die Namespaces, dies sind Quasi Ordner für Dateien die gleich heißen könnten, wenn mans mal auf das Filesystem überträgt.

Mit den Namespaces kann man das Ganze eben eindeutiger gestalten. Und ja du kannst Funktionen, Klassen oder Objekte aus verschiedenen Namespaces benutzen. Machst du dann eben explizit über den Scopeoperator.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012
apachy  15.07.2012, 22:23

Der Namespace selbst gilt btw immer für den gesamten Block etwas wie:

{
    using namespace eins;
    klasse_aus_eins test;
}

{
    using namespace zwei;
    klasse_aus_zwei test2;
}

Müsste aber funktionieren, meist brauch mans aber nicht und kann eben mit dem Scopeoperator arbeiten.

0

Ein namespace ist für den Zweck gedacht, um Namenskonflikte zu vermeiden. dh. damit du Bezeichner doppelt verwenden kannst.

namespace MeinNamespace
{
       void test()
       {
              std::cout<<"hello world"<<std::endl;
       }
}

um die Funktion "test" nun aufzurufen, ist die voran Setzung des namespaces notwendig, also: MeinNamespace::test(); Wie bereits von apachy erklärt kannst du dir diese also wie Ordner vorstellen. mit "using namespace;" löst du einen namespace auf, das heißt die Voranstellung des namespace-namens ist nicht mehr notwendig, du kannst test(); nun direkt aufrufen. Generell sollte man aber ins besondere bei Bibliotheken die Auflösung der namespaces vermeiden, denn sie sind ja nicht ohne Grund da. Den blöd sin mit dem "Default" unten solltest du schnell wieder vergessen, ist nämlich ausgemachter quatsch. Du kannst so viele namespaces auflösen und verwenden wie du möchtest, solltest aber bedenken das es dadurch zu Namenskonflikten kommen kann. Der Compiler wird dir dann einen "error C2086, redefinition" an den Kopf schmeißen, da du einen Namen ja nur einmal verwenden darfst. Wie bereits gesagt solltest du aber das Auflösen komplett vermeiden. (wenn mann so faul ist wie ich, muss mann sich dann zm. unter Visual Studio außerdem auch keine oder weniger Bezeichner merken xD).

LG SK

Dies macht, dass du z.B. anstatt

std::cout << ...

nur

cout << ...

schreiben musst. Also wie der Name schon sagt, wird 'std' sozusagen als Default verwendet.

Besser erklähren kann ichs auch nicht, zumindest nicht auf deutsch...

HiFriend 
Fragesteller
 15.07.2012, 22:01

kann man mehrere "namespaces" benutzen?

0
PhotonX  15.07.2012, 22:13
@HiFriend

Ich bin mir nicht sicher, aber ich denke nicht. Denn was würde passieren, wenn es in mehr als einem Namespace die gleiche Funktion gibt? Dann ist nicht klar, welche Version der Funktion zu verwenden ist. Es könnte natürlich sein, dass der Kompiler alle als Standard genutzten Namespaces auf Überschneidungen überprüft und, wenn keine existieren, doch noch mehrere Standard-Namespaces erlaubt, aber ich bezweifle, dass jeder Kompiler das macht...

0

http://de.wikipedia.org/wiki/Namespace

Wäre das so schwer, hier mal zu stöbern … :-)

Übrigens sind die Namespaces ein kann und kein muß. Z.B. kann man bei den Klassendateien die Klasse selbst mit einer „Vorzeichnung“ versehen und damit die normalen mitgelieferten Standard-Klassen und seine eigenen Klassen unterscheiden. Dann genügt wirklich nur dein „Schrieb“: Using namspace Std;

Übrigens kennt das „reine“ C keine Namensräume. Objective-C auch nicht. M.a.W. sind die Namespaces ein Behelf, um aus Dingen ein Problem zu machen, die ein guter Compiler einem auch mit Warnungen und sinnvollen Fehlermeldungen anzeigen könnte – dafür braucht man kein besonderes Schlüsselwort … :-)