Was ist der Unterschied zwischen cin und std :: cin?


Beste Antwort

std ist ein Namespace. Namespaces wurden zu C ++ STD 90 hinzugefügt. In älteren Versionen von C ++ haben Sie cout verwendet, da es keinen Namespace gab, und in modernem C ++ werden Sie std :: cout verwenden.

Der Vollständigkeit halber habe ich Wenn Sie oben angegeben haben, dass Sie using namespace std; sind, bedeutet cout std::cout .

Dies ist jedoch kein empfohlener Weg und sollte zugunsten eines vollständig qualifizierten std :: cout-Namens vermieden werden.

TL; DR; Namespaces verhindern Namenskonflikte in großen Projekten. std ist der Namespace von Standardbibliotheken von C ++.

Erläuterung: Genau wie der Name schon sagt, werden Namespaces verwendet, um den Umfang eindeutiger Namen zu begrenzen und die Möglichkeit zu verringern, dass zwei Entitäten denselben Namen haben. Jede Sprache braucht es und bietet es auf die eine oder andere Weise. Java nennt es beispielsweise ein Paket.

In einem kleinen Programm, beispielsweise 100 bis 500 Zeilen, klingt es wie ein Overkill, eine * Sprachfunktion * zu haben, um sicherzustellen, dass alle Namen eindeutig sind oder so ähnlich. Aber Namenskonflikte können auf eine Art und Weise auftreten, die unter dem Tisch liegt. Wenn ich eine Bibliothek mit einer Klasse namens XYZ geschrieben habe und Ihr anderer Freund eine andere Bibliothek mit dem gleichen Klassennamen XYZ geschrieben hat. (Die Klassen können unterschiedlichen oder gleichen Zwecken dienen, aber das spielt keine Rolle.) Wir haben an unseren Enden kein Problem. Angenommen, Sie entwickeln eine Software und verwenden BEIDE Bibliotheken. Jetzt hat Ihr Projekt zwei Definitionen der Klasse XYZ. Dadurch wird der Build einfach unterbrochen, und selbst wenn Sie wahrscheinlich keine der beiden Klassen verwenden / benötigen, ist es unmöglich, Code mit diesen beiden Bibliotheken zusammen zu erstellen, nur weil sie mit demselben Namen definiert sind.

Namespaces lösen dieses Problem. Ich und Ihr Freund haben unterschiedliche Namespaces für unsere Bibliotheken. (Namespaces müssen global eindeutig sein und enthalten daher häufig auch die Identität des Entwicklerunternehmensnamens, damit einige andere Entwickler, die eine Bibliothek schreiben, nicht denselben Namespace für ihre Bibliothek auswählen.)

Ein Klassiker Beispiel ist die List-Klasse in Java. Es gibt 2 Listen. Eine ist eine Schnittstelle für die Datenstrukturliste. Andere ist die GUI-Listenkomponente Liste. Sie können beide in einem Programm verwenden. In diesem Fall verweisen Sie auf vollständig qualifizierte Namen (java.util.List oder java.awt.List). In den Paketen können Sie dieselben Namen verwenden. Wenn wir sonst versuchen, beide hinzuzufügen, erfährt der Compiler nie, welche Liste Sie möchten, und meldet einen Fehler aufgrund von Mehrdeutigkeit (mit zwei gleichermaßen abzugsfähigen Bedeutungen einer einzelnen Anweisung).

std ist der Name, der für die C ++ – Standardbibliothek ausgewählt wurde.

Dies bedeutet, dass sich alles in Standardbibliotheken unter std befindet und im Code als std :: cout, std :: string bezeichnet wird , std :: map und so weiter.

Dies bedeutet auch, dass Sie nichts im std-Namespace definieren und beim Schreiben einer Bibliothek einen separaten Namespace erstellen sollten, damit Sie nicht verschmutzen Standard-Namespace.

Antwort

Wenn Sie einen alten Compiler verwenden, funktioniert einfach cin einwandfrei.

Bei modernem C ++ werden jedoch alle Standardmaterialien in den std -Namensraum eingeschlossen.

Namespaces helfen, Namenskonflikte zwischen zu vermeiden Bibliotheken oder Header-Dateien.

Wenn Sie also moderne Kompilierung verwenden ähm, dann müssen Sie den Namespace importieren, damit Sie ihn verwenden können, oder wenn Sie nicht alle Konstrukte, sondern nur einige davon importieren möchten, verwenden Sie std :: cin oder std :: cout.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.