《STL源码剖析》学习笔记(一):编译器与STL版本

最近在学习侯捷老师的《STL源码剖析》,这本书很老了,里面使用的例程在我的IDE上无法运行(我的IDE是CodeBlocks),查找了许多博客了解各种编译器与STL版本的相关知识,记录在这篇笔记中。

编译器

我们现在使用的CodeBlocks、Visual Studio、DEV-C++都是IDE(集成开发环境),提供了三个主要组件:源代码编辑器(Editor)、编译器或解释器(Compiler / Interpreter)和调试器(Debugger)。
关于编译器和解释器的区别,请查看这位朋友的博客关于编译器与解释器的区别
这篇博客里解释了C++是需要编译器而不是解释器的一种语言,那么C++的编译器有哪些呢?
《STL源码剖析》里提到了g++(GNU C++),首先需要明确的是g++是在linux环境下使用的,书中使用的编译平台是cygnus 2.91 for Windows,下载地址在这里,这款软件我的理解就是它创建了一个类似linux的环境,然后内置了g++编译器,借助这个软件可以像在Linux终端中使用g++那样在Windows中使用g++,但是我没找到编辑界面,所以我用记事本写了程序,然后修改后缀.txt为.cpp,像这样:
在这里插入图片描述
然后打开cmd,进入到这个文件的存放位置,然后g++编译:
在这里插入图片描述
用这种方式就可以对书中的例程进行实验了。这个软件中的STL源码存放在C:\cygnus\cygwin-b20\include\g++中。
我打开了codeblocks的文件夹,发现了MinGW,然后又在这篇博客当中了解了cygwin和mingw的区别,我的理解是mingw是把程序中使用Linux的东西改写为同样操作的Windows的东西,然后内置的编译器是gcc/g++,我在这个目录下找到了源码C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits

STL版本

书中提到,HP(惠普)版本是STL实现版本的始祖(想想惠普当年多牛,现在感觉就剩下打印机了 ,唉!),然后Visual C++使用的是P.J.Plauger版本,Visual C++现在都是集成在Visual Studio当中了,我了解的貌似它的编译器是cl.exe,可以运行这个然后cl XXX.cpp来进行编译,我用不太习惯VS,我的破电脑运行VS会卡;C++Builder使用Rouge Wave版本的STL;g++使用SGI版本的STL,注意,书中提到GCC指的是GNU Compiler Collection(GNU 编译器集合),包括了g++和gcc。

困惑的答案

然后回到我最开始困惑的地方,为什么我用CodeBlocks无法编译书中的例程,既然同样是内置g++编译器,cygwin和mingw会影响语法吗?我又打开两款软件的g++源码进行比较,的确不一样,比如宏定义,比如STL的实现方式,我在CodeBlocks的源码中看到了三个copyright,如下:
Copyright © 2001-2015 Free Software Foundation, Inc.
Copyright © 1994 Hewlett-Packard Company
Copyright © 1996,1997 Silicon Graphics Computer Systems, Inc.
所以这一份STL是在SGI版本的基础之上再进行更新改良的,貌似可以称作GNU ISO C++库版本。

以上内容是我的个人理解,如果有不对的地方希望大家可以告诉我。《STL源码剖析》应该是学习C++必读书目,我读完一遍受益匪浅,但是忘得也快,所以打算重新阅读,以博客的形式把自己的理解整理记录,书中的STL版本也许是过时的,但是它内在的原理是不变的,愈久弥新,读来虽然费劲,但引用古月老师的一句话,“怕什么真理无穷,进一寸有一寸的欢喜”,共勉。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值