Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

using namespace std

Empfohlene Antworten

Veröffentlicht

Hallo,

unser lehrer hat uns versucht zu erklären was es mit using namespace std auf sich hat. Hat aber keiner richtig verstanden.

hat das was mit den >> und << von den couts und cins zu tun?

Könnt ihr mir helfen?

Original geschrieben von b-r-e

Hallo,

unser lehrer hat uns versucht zu erklären was es mit using namespace std auf sich hat. Hat aber keiner richtig verstanden.

hat das was mit den >> und << von den couts und cins zu tun?

Könnt ihr mir helfen?

"using namespace std" ist eine Direktive. Im Gueltigkeitsbereich der Datei wird der Namensbereich (namespace) mit dem Namen std zur Verfügung (using) gestellt. Man kann dies auch weglassen, dann müsste man aber überall cout durch std::cout ersetzen, weil die globale Variable cout zum Namensbereich std gehört. Mit dieser Direktvie tut man das einfach gesagtdem Compiler vorher sagen ;)

<< und >> sind Ein- bzw. Ausgabeoparatoren und können bzw. müssen eben bei der Verwendung von z.B. cout und cin benutzt werden. Man kann diese auch überlagern (z.B. für eigene Klassen).

Naja, einleuchten tut mir das noch nicht.

Dass man std immer davor schreiben müsste hat unser lehrer auch gesagt.

Irgendwie will das nicht in meinen Schädel.

Wir arbeiten in der BF auch ohne using namespace std; aber wir müssen auch kein std:: vor alles setzten. Hängt das damit zusammen das wir die Headerdateien als <datei.h> einbinden und nicht als <datei>?

mfg

Jepp.

iostream.h ist z.B. vor dem C++ Standard entstanden und sollte nicht genutzt werden.

iostream mit std:: ist die richtige wahl.

(Ich verstehe nicht wieso in Schulen so oft so nen schrott gemacht wird)

Ja frage ich mich auch.

Allerdings wollte ich letztens using namespace std; verwenden, weil mein Buch mir das auch sagt, aber Borland C++ 5 kannte den befehl gar nicht.

Jetzt bin ich noch mehr verwirrt.

Wir machen das so

# include <iostream>

using namespac std;

int main ()

{

cout << "Ausgabe";

return 0;

}

wir haben Visual Studio

Ist doch auch richtig, so macht man das. Wie wir das in der Schule lernen ist es eigentlich nicht dem Standard entsprechend. Bei uns würde das so aussehen:


# include <iostream.h>


int main ()

{

cout << "Ausgabe";


return 0;

}

mfg

Was macht das ".h" so ausschlaggebend?

Das sind doch nur namen der Headerdateien. Ist die iostream.h nicht die gleiche wie die iostream?

Nein. Im Detail weiss ich es auch nicht, aber soviel:

iostream.h wurde vor dem eigentlichen Standard entwickelt. Es wurde nicht im Standard aufgenommen. Eine weiterentwicklung, modifikation oder sonst wie (was) wurde dann als iostream in den Standard aufgenommen.

iostream.h ist älter als iostream. Zudem liegt alles im Namensraums std , iostream.h liegt dagegen im globalen Namensraum.

Mal ein kleiner Versuch Namespaces zu erklären:

Namespaces wurden in den ISO-Standard aufgenommen um die Namensvergabe zu vereinfachen. Sie ermöglichen z.B. Klassen, die im Grunde das selbe tun, aber unterschiedlichen Kontext haben, gleich zu benennen. Wie z.B. cin oder cout. Diese stehen in std. Es koennte aber sein, das du gleichnamige Funktionen schreibst, die z.B. ein LCD-Display bedienen.

namespace lcd {

void cout() { /* ... */ } // deine cout Funktion (Die Deklaration ist Schmarrn, aber hier nicht wichtig.)

}

void main(void)

{

lcd::cout(); // Das geht

cout(); // würde nicht gefunden werden

using namespace lcd; // Jetzt weiss der Compiler bescheid, dass er in diesem Namespace Funktionen aufrufen darf.

cout(); // geht

std:cout(); // Um sicher zu gehen, dass die richtige Funktion verwendet wird, kann man den Namespace nennen.

}

Noch ein Nachtrag um den Unterschied zwischen <iostream> und <iostream.h> aufzuklaeren.

Es handelt sich tatsächlich um zwei verschiedene Dateien. Warum iostream keine Endung mehr hat, weiss wohl nur die ISO ;)

Im Grunde sind beide gleich, iostream deklariert noch den namespace:

iostream.h:


extern istream cin; ///< Linked to standard input
extern ostream cout; ///< Linked to standard output
:
usw...
[/PHP]

iostream:

[PHP]
namespace std {

extern istream cin; ///< Linked to standard input
extern ostream cout; ///< Linked to standard output
:
usw...
}

Gleich sind sie nicht, im Detail gibt es unterschiede. Da ich diese aber im Detail nie herausgesucht hab bleibt das als Übung dem Anwender überlassen ;)

Na is doch nich wild. Da die meisten Fragen hier ohnehin AnsiC sind, werden auch AnsiC Spezis gebraucht :)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.