2017-06-06 27 views
-3

是否可以查看某些C++庫的底層實現以及如何實現?如何查看C++頭文件的實際實現?

例如,我想看看如何實現std::map。我知道這是一棵平衡的樹(紅黑樹),但我希望看到實際的實施。這可能嗎?

+3

libC++和libstdC++都是開源的。 – NathanOliver

+2

@FrançoisAndrieux:儘管如此,編譯器允許不具有**文件**作爲系統頭文件「」。 (例如,編譯器可能有一個內部緩存)。 – Jarod42

+0

@ Jarod42我從來沒有遇到過,感謝您的更正。 –

回答

-1

你需要的是來源。對於glibc(或其他開源庫)中的內容,應該可用。

0

沒有要求std::map<>的實現細節對該庫的用戶可見。 A「C++實現」可以做任何它認爲方便的,這樣,當你寫

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

代碼編譯和運行。

一些實現發現它確實是「方便」的地方的代碼可能看起來像

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

文件稱爲地圖。如果你正在使用這樣的實現,你應該能夠在某個地方找到磁盤上的文件。 (請注意,僅僅因爲這樣的文件可能存在,這並不一定意味着您可以隨意對其內容進行任何操作。)