哪里可以下载 C++ STL源代码.h和.cpp文件?
我从 http://www.sgi.com/tech/stl/ 下载了 STL 源代码download.html ,但它只有 .h 作为函数声明。在哪里可以下载 .cpp 文件以阅读实际实现?
例如,在 stl_multimap.h 或 stl_map.h 中,它具有:
template <class _Key, class _Tp, class _Compare, class _Alloc>
inline void swap(multimap<_Key,_Tp,_Compare,_Alloc>& __x,
multimap<_Key,_Tp,_Compare,_Alloc>& __y) {
__x.swap(__y);
}
我想知道交换的实际实现,因为
__x.swap(__y);
我看不到交换的实际代码在哪里。在这里,它只是调用自己。
I downloaded the STL source code from http://www.sgi.com/tech/stl/download.html , but it only has the .h for the function declaration. Where can I download the .cpp files to read the actual implementation?
For example, in the stl_multimap.h or in stl_map.h, it has:
template <class _Key, class _Tp, class _Compare, class _Alloc>
inline void swap(multimap<_Key,_Tp,_Compare,_Alloc>& __x,
multimap<_Key,_Tp,_Compare,_Alloc>& __y) {
__x.swap(__y);
}
I want to know the actual implementation of the swap as in
__x.swap(__y);
I don't see where the actual code for swap is. In here, it just calls itself.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
.h 文件包含实现。该页面上的许多标头只是其他标头的包装器或提供 typedef,但如果您查看像
stl_set.h
这样的文件,您将看到它具有 <代码>设置类。甚至页面本身也声明它是一个仅包含标头的库,这意味着实现包含在标头中。
The .h files contains the implementations. Many of the headers on that page are just wrappers around other headers or provide typedefs, but if you look at a file like
stl_set.h
, you will see that it has all the definitions of functions for theset
class.Even the page itself states that it is a header-only library, which means that the implementations are included in the headers.
C++ 库的实现因不同的编译器/系统而异。
如果您使用 GCC/G++ 作为编译器,您可以从 http://gcc 下载源代码。 gnu.org/libstdc++/ 。
或者您可以使用以下命令匿名查看源代码:
The implementation of the C++ library varies on different compiler/system.
If you are using GCC/G++ as your compiler, here you can download the source code from http://gcc.gnu.org/libstdc++/ .
Or you can anonymously checkout the source code using this command:
STL是一个模板库。我希望您只能在头文件中找到实现。
STL is a template library. I hope you will find the implementation in header files only.
没有别的事了。请注意,该页面显示:
The isn't anything else. Note that the page says:
实现都在头文件中。您必须使用模板来做到这一点。 :-/
The implementations are all in header files. You have to do that with templates. :-/
您可以在
std_algobase.h
中找到swap
的实现。You can find implementation for
swap
instd_algobase.h
.SGI STL 文件名均以“stl_”开头。
例如,SGI 版本向量的实现位于文件 stl_vector.h 中。
The SGI STL file names all start with "stl_".
For example, the SGI version vector's implemetation is in file stl_vector.h.
下面是文件 stl_algobase.h 中 swap 和 iter_swap 的代码
Below is code for swap and iter_swap inside file stl_algobase.h
您不需要下载文件。您可以使用 STL,因此该库的某些版本必须位于您计算机上的某个位置。这引出了 Stackoverflow 上已经提出的另一个问题:哪里是C++ 标准库的头文件。
您可以使用 bash 工具“locate”。例如。 “locate stl_multimap.h”对我来说会产生:
一旦你查看了目录,其他所有东西都在哪里应该变得非常明显。
在每个位置,我都会找到该文件的不同编译器版本。对于我的计算机,所有 gcc 7.* 文件都位于我的
/usr/include/c++/7
目录中。如果由于某种可怕的原因您使用 Windows,我相信您将能够使用 Powershell 找到等效的命令。
You don't need to download the files. You're able to use the STL, so some versions of the library must be on your computer somewhere. This leads to the another question already asked on Stackoverflow: Where are the headers of the C++ standard library.
You can use the bash tool "locate". eg. "locate stl_multimap.h" for me yields:
Once you have a look at the directories it should become pretty obvious where everything else is too.
In each of those locations I'll find the different compiler versions of the file. For my computer, all the gcc 7.* files are in my
/usr/include/c++/7
directory.If for some horrible reason you use Windows, I'm sure that you'll be able to find an equivalent command with Powershell.