Was ist der Unterschied zwischen iostream
und iostream.h
?Unterschied zwischen iostream und iostream.h
Antwort
iostream.h
wird von den Compilern veraltet, die es bereitstellen, iostream
ist Teil des C++ - Standards.
Zur Klarstellung wird im aktuellen C++ - Standard (INCITS ISO IEC 14882 2003) überhaupt kein iostream.h
erwähnt.
Edit: Wie @Jerry erwähnt, nicht nur die aktuelle Norm nicht erwähnen, aber kein Standard für C++ erwähnt es.
iostream ist ein Standardkopf. iostream.h ist ein nicht standardmäßiger Header, der in C++ vor dem Standard sehr häufig vorkommt, und aus dem sich iostream entwickelt hat. Es ist immer noch üblich, iostream.h zu verwenden, vermutlich für die Verwendung mit älteren Programmen.
Wenn Ihre Implementierung eine Arbeitskopie von iostream.h hat, ist es wahrscheinlich die gleiche wie Iostream außer, dass alles in Iostream im std
Namespace ist, während iostream.h Namensräume im Allgemeinen voraus, und sie auch nicht benutzt.
Wenn Ihre Implementierung sowohl Iostream und iostream.h hat, Iostream ist wahrscheinlich wie arbeiten:
namespace std
{
#include <iostream.h>
}
obwohl das nicht unbedingt ist, wie es geschrieben ist.
Tatsächlich gibt es oft einen * viel * mehr Unterschied als das - die Streams in iostream.h waren in der Regel keine Vorlagen wie sie in Iostream sind. Wenn Sie viel mehr tun als einfaches Lesen und Schreiben (z. B. irgendwelche Manipulatoren schreiben), ist der Unterschied oft beträchtlich. –
@Jerry: Du hast Recht, aber leider bringst du Erinnerungen an ein System zurück, das ich konvertieren musste und das einige schlecht dokumentierte Zauberei in den Streams hatte. Dies bedeutet jedoch nicht zwangsläufig, dass in einer modernen Implementierung ein signifikanter Unterschied zwischen iostream.h und iostream besteht. Wenn ich mich erinnere, schaue ich mir meine gcc-Implementierung an, wenn ich nach Hause komme. –
Ja, deshalb habe ich an anderer Stelle angemerkt, dass die Unterschiede zwischen iostream und iostream.h sehr unterschiedlich sind. In einigen Fällen ist iostream.h eine aktuelle Implementierung mit 'using' Deklarationen für alle Inhalte. In anderen Fällen ist es eine alte Implementierung (und in einigen, etwas dazwischen ...) –
Wenn C++ zum ersten Mal erstellt wurde, wurden alle Dateien in der Standardlaufzeitbibliothek in .h beendet. Das Leben war beständig und es war gut. Die ursprüngliche Version von cout und cin lebte in iostream.h. Als die Sprache vom ANSI-Komitee standardisiert wurde, beschlossen sie, alle Funktionen in der Laufzeitbibliothek in den std-Namespace zu verschieben (was im Allgemeinen eine gute Idee ist). Dies stellte jedoch ein Problem dar: Wenn sie alle Funktionen in den std-Namespace verschoben hätten, würde keines der alten Programme mehr funktionieren!
Um dieses Problem zu umgehen und gleichzeitig die Abwärtskompatibilität für ältere Programme beizubehalten, wurde eine neue Gruppe von Headerdateien eingeführt, die dieselben Namen verwenden, aber die Erweiterung .h nicht aufweisen. Diese neuen Header-Dateien haben alle ihre Funktionalität im std-Namespace. Auf diese Weise müssen ältere Programme, die #include <iostream.h>
enthalten, nicht neu geschrieben werden, und neuere Programme können #include <iostream>
.
Wenn Sie eine Headerdatei aus der Standardbibliothek einfügen, vergewissern Sie sich, dass Sie die Nicht-.h-Version verwenden, falls sie existiert. Andernfalls verwenden Sie eine veraltete Version des Headers, der nicht mehr unterstützt wird.
Darüber hinaus wurden viele der von C geerbten Bibliotheken, die in C++ immer noch nützlich waren, mit einem c-Präfix versehen (z. B. stdlib.h wurde zu cstdlib). Die Funktionalität dieser Bibliotheken wurde ebenfalls in den std-Namespace verschoben, um Namenskonflikte zu vermeiden.
Wenn Sie jedoch Ihre eigenen Headerdateien schreiben, sollten Sie ihnen alle die Erweiterung .h geben, da Sie Ihren Code nicht in den std-Namespace eingeben.
Regel: Verwenden Sie die nicht-.h-Version einer Bibliothek, wenn sie vorhanden ist, und greifen Sie auf die Funktionalität über den std-Namespace zu. Verwenden Sie die H-Version
, wenn die non-h-Version nicht vorhanden ist oder wenn Sie Ihre eigenen Header erstellen, sollten Sie den Namespace std erwähnen. – zdan
@Jerry: Behielt den Wortlaut aber geklärt die Bedeutung –
@Jerry: Danke, hinzugefügt. –