using namespace std ?
-
pale dog schrieb:
wenn du das 'using namespace std;' weglässt, dann musst du vor diese ganzen stl-objekte etc. immer 'std::' schreiben...

Bzw. vor alles, was Du aus dem std-Namensbereich verwenden willst
.
-
oder:
using std:: //und dann die Funktion die du benutzen willst z. B. cout
-
der namespace wurde nicht aus spaß eingeführt sondern um bei großen namensprojekten namenskonflikte zu unterbinden. noch fragen
?
-
noch fragen ?
Ja. Was zum Teufel sind Namensprojekte?
Och Stelfer.
-
Ich glaub Namesprojekte sind z.B. Telefonbücher.
-
@1: (fast) Die komplette Standardbibliothek ist im Namensraum "std" - deshalb mußt du entweder das "std::" vor jede Verwendung schreiben oder die Namen per using (einzeln oder komplett) in den globalen Namensraum importieren.
Und Namensräume wurden geschaffen, um Konflikte zwischen verschiedenen Bezeichnern zu minimieren. z.B. könnte eine Geometrie-Bibliothek eine eigene Klasse 'vector' definieren, ohne daß es Probleme mit der Standardklasse 'std::vector<>' gibt.
@2: C++ Header haben per Definition keine Dateiendung. Aber du kannst auch in C++ die alten C Header noch verwenden (aber besser die C++ Version davon
d.h. aus <stdlib.h> wird <cstdlib> etc.).
Die <iostream.h> ist ein Sonderfall - das ist eine Prä-ANSI-Version der <iostream> und auf vielen Systemen noch verfügbar. Allerdings ist dieser Header nicht 100% kompatibel zur ANSI-IOStream-Bibliothek.
-
Noch ergänzend, die alten Header mit der Endung .h sind aus Kompatibilitätsgründen weiterhin vorhanden.
-
CStoll schrieb:
Und Namensräume wurden geschaffen, um Konflikte zwischen verschiedenen Bezeichnern zu minimieren. z.B. könnte eine Geometrie-Bibliothek eine eigene Klasse 'vector' definieren, ohne daß es Probleme mit der Standardklasse 'std::vector<>' gibt.
Geht es bei den Namespaces nicht eher um ein besseres Informationhiding und eine verbesserte Aufteilung in logische Einheiten?
Ein Namespace ist einem Ada-Package bzw. einem Java-Package relativ ähnlich, und deren primäre Funktion ist nicht das unterbinden von Namenskonflikten (was aber implizit mitgeliefert wird) sondern das oben genannte.
-
Naja, in einem Namespace findet jedenfalls kein Information Hiding statt, da ja nichts verborgen ist vor der Außenwelt.
Richtig ist (Stroustrup schreibt das selber in seinem Buch zu C++), dass der Namesraum eine logische Einheit kapseln soll. Positiver Nebeneffekt ist sicher auch das Vermeiden von Namenskonflikten.
Die Analogie Namespace <-> Java-Package trifft es ganz gut.
-
Bis auf dass es in Java "package access" gibt, wofür man in C++ eben "friend" verwendet.
Wozu Namespaces ursprünglich primär gedacht waren weiss ich nicht, ich weiss nur dass es verflucht lästig wird ohne Namespaces, und zwar nicht wegen der fehlenden "logischen zusammenfassung", sondern wegen der name clashes die man dann andauernd bei grösseren Projekten bekommt.
-
mikey schrieb:
Noch ergänzend, die alten Header mit der Endung .h sind aus Kompatibilitätsgründen weiterhin vorhanden.
Wo steht das? Mag ja bei dem ein oder anderen Compiler der Fall zu sein, aber ich bezweifel mal, das im ISO-C++ Standard was davon drin steht.
-
Artchi, ich habe nicht gesagt, dass das im Standard steht. Die C++ ISO hat im neuen Standard den alten Headern neue Namen mit vorangestelltem "c" gegeben: <cmath>... Der Standard schreibt nicht vor, den Compilernhersteller weiterhin die alten C-Header auszuliefern.
-
hustbaer schrieb:
Bis auf dass es in Java "package access" gibt, wofür man in C++ eben "friend" verwendet.
Wozu Namespaces ursprünglich primär gedacht waren weiss ich nicht, ich weiss nur dass es verflucht lästig wird ohne Namespaces, und zwar nicht wegen der fehlenden "logischen zusammenfassung", sondern wegen der name clashes die man dann andauernd bei grösseren Projekten bekommt.
Ich würde sagen du hast dir damit deine Frage selber beantwortet

-
Artchi schrieb:
mikey schrieb:
Noch ergänzend, die alten Header mit der Endung .h sind aus Kompatibilitätsgründen weiterhin vorhanden.
Wo steht das? Mag ja bei dem ein oder anderen Compiler der Fall zu sein, aber ich bezweifel mal, das im ISO-C++ Standard was davon drin steht.
D.5 schrieb:
For compatibility with the Standard C library, the C++ Standard library provides the 18 C headers, as shown in Table 100.
-
Michael E. schrieb:
Artchi schrieb:
mikey schrieb:
Noch ergänzend, die alten Header mit der Endung .h sind aus Kompatibilitätsgründen weiterhin vorhanden.
Wo steht das? Mag ja bei dem ein oder anderen Compiler der Fall zu sein, aber ich bezweifel mal, das im ISO-C++ Standard was davon drin steht.
D.5 schrieb:
For compatibility with the Standard C library, the C++ Standard library provides the 18 C headers, as shown in Table 100.
Jap, das sind aber *nur* die C-Header, also nicht "iostream.h" etc.