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).
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
Ich stimme dem Duplikat zu. Ich war mir dieser c-Vorsilbe nicht bewusst .h, also habe ich nicht danach gesucht – Glostas