2017-06-06 71 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 { /* ... */ }; 
} 

文件称为地图。如果你正在使用这样的实现,你应该能够在某个地方找到磁盘上的文件。 (请注意,仅仅因为这样的文件可能存在,这并不一定意味着您可以随意对其内容进行任何操作。)