2017-06-06 1 views
-3

Ist es möglich, die Implementierung bestimmter C++ - Bibliotheken unter die Haube zu sehen und wie?Wie wird die tatsächliche Implementierung von C++ - Headern angezeigt?

Zum Beispiel würde ich gerne sehen, wie std::map implementiert ist. Ich weiß, es ist ein ausgewogener Baum (rot-schwarzer Baum), aber ich würde gerne die tatsächliche Umsetzung sehen. Ist das möglich?

+3

libC++ und libstdC++ sind beide Open Source. – NathanOliver

+2

@ FrançoisAndrieux: Compiler dürfen nicht ** Dateien ** für System-Header als '' obwohl. (Compiler kann zum Beispiel einen internen Cache haben). – Jarod42

+0

@ Jarod42 Das war mir noch nie begegnet, danke für die Korrektur. –

Antwort

-1

Sie benötigen die Quelle. Für Dinge in glibc (oder anderen Open-Source-Bibliotheken) sollte das verfügbar sein.

0

Es ist nicht erforderlich, dass die Implementierungsdetails von std::map<> für einen Benutzer dieser Bibliothek sichtbar sind. Eine „C++ Implementierung“ kann tun, was es bequem findet, so dass, wenn Sie

#include <map> 
std::map<int, int> map; 

der Code kompiliert und ausgeführt schreiben.

Einige Implementierungen finden, dass es in der Tat „bequem“ ist der Code zu platzieren, dieKarte genannt etwas wie

namespace std 
{ 
    template<typename Key, typename T, 
     typename Compare = std::less<Key>, 
     typename Allocator = std::allocator<std::pair<const Key, T>>> 
    class map { /* ... */ }; 
} 

in einer Datei aussehen könnte. Wenn Sie eine solche Implementierung verwenden, sollten Sie die Datei irgendwo auf der Festplatte finden können. (Und nur weil eine solche Datei existiert, bedeutet das nicht unbedingt, dass Sie mit ihrem Inhalt alles machen können, was Sie wollen.)

Verwandte Themen