2016-07-25 6 views
0

Ich baue gerade mein erstes komplexeres C++ - Programm, das einen eigenen Namespace enthält. Natürlich verwende ich mehrere Importe. Was ich seltsam fand, ist diese Funktion, die z.Was wird in den Standard-Namespace geladen?

#include <math.h> 

kann im Arbeitsbereich

a = cos(b) 

wo der cos-Funktionsteil der Datei math.h. zugegriffen werden Auf der anderen Seite Funktionen enthalten mit z.

#include <fstream> 

muss über

std::ifstream 

oder ähnliche accesed werden. Ich möchte das verstehen

+0

Ich stimme der Antwort zu. Beachten Sie, dass Sie, wenn Sie nicht damit leben können, 'namespace math {#include }' sagen. Dies funktioniert mit C-Headern, normalerweise nicht mit C++ - Einsen. – lorro

+0

Ich stimme dem Duplikat zu. Ich war mir dieser c-Vorsilbe nicht bewusst .h, also habe ich nicht danach gesucht – Glostas

Antwort

4

C++ - Standardbibliothek enthält die meisten der C-Bibliothek (es gibt einige verschwommene Details um optionale Teile der C-Bibliothek).

Da C kein Namespacing-Konzept hat, befindet sich alles, was in der C-Bibliothek enthalten ist, im globalen Namespace. Da <math.h> ein C-Header ist, werden seine Funktionen in den globalen Namespace eingefügt.

Alles, was von der C++ - Standardbibliothek enthalten ist, befindet sich im Namespace std::, wie std::ifstream, wenn Sie <fstream> Header enthalten.

Wo es Spaß macht, sind Aliase. Als ein Beispiel kann <math.h> auch als <cmath> enthalten sein. Die Idee dahinter war, dass Sie auswählen, ob Sie die C-Symbole im globalen Namespace (einschließlich <math.h>) oder im Namespace std:: (einschließlich <cmath>) möchten, aber dies hat nicht geklappt und allgemein, wenn Sie die C++ - Version des Headers (dh <cmath>), werden Sie beide bekommen.

Wenn ein Header entweder über <foo.h> oder <cfoo> enthalten sein kann, ist es im Allgemeinen ein C-Header. C++ - Standardbibliotheksheader haben diese Aliase nicht (außer wenn Sie sich mit nicht standardmäßigen Dingen wie iostream.h befassen müssen, die auf einigen Plattformen anscheinend noch existieren).