博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL的L细细品
阅读量:4190 次
发布时间:2019-05-26

本文共 1521 字,大约阅读时间需要 5 分钟。

 
STL是英文standard template library的简写,中文名标准模板库。我们今天不说它的容器呀,迭代器呀,匹配器呀,算法呀这些,单说它的library。
“噢Library呀!库嘛。我哪个六岁半的学习编程的小儿子也知道。不就是库嘛,有什么好说的。”
然而,此库非彼库。STL的L虽然也是库,但这个库与已往的库有一些在本质上的差异。这怕是一个刚学编程的六岁半的小孩所不知道的吧。好了,闲言少叙,下面进入正题。
先从库的老祖宗lib说起。要使用lib库必需要有两个文件。一个文件是.h的,是库的头文件,用来说明库里有什么可用的内容。一个文件是.lib的,是库的实现文件,是库的具体实现,同时它里面也包含了一些定位信息。这种库被人们叫做静态库。因为这种的库的使用方式是:在链接的过程中,直接就链入我们的目标文件了。
再说现在比较流行的动态库。动态库一般会向外公开三个文件。以windows的动态库为例:一个文件是.h,一个文件是.lib,一个文件是.dll。.h文件的作用和静态库的一样,.lib的作用是包含一些导出信息。.dll文件中包含真正的实现和定位信息。
对比上面的两种库,我们发现.h文件是它们中必不可少的。这是因为.h所担当的角色:说明库里有什么可用的内容,而决定的。少了这个说明,这个库可怎么用呀。你能这样和别人说吗?“我给你一个库,你去用吧,但这个库没有用法”。所以,不论是静态库还是动态库,都向外提供一个.h文件来说明这个库的用法和内容。.h文件就象是库的一个微型说明书。
最后我们看STL的库。这种库只提供一种文件,而且没有任何扩展名。这样做的意思是说:“我可以一顶二(对于静态库来说),我可以一顶三(对于动态库来说)”。
STL的库确实是可以一顶二,一顶三。但它这样做却破坏了一个重要的软件原则:说明和实现分开。说明和实现分开这个原则可以为软件的升级和复用带来很多好处。说明为使用方和提供方之间建立了一个协议,双方只要遵守这个协议,提供方就可以很方便的修改实现部分,而不会对使用方添加麻烦。
可以STL却把说明和实现放到一块了。这就是说STL中想要改变一下实现,会对使用了STL的用户带来非常大的影响。下面我针对这个举一个例子。
假设现在我们要做一个库(不管是动态库,还是静态库):它的头文件如下:
#ifndef
TEST_H
#define
TEST_H
void
output(std::string& arg);
#endif
这个库的功能很简单,只向外提供一个output函数。而这个output函数的用法也很简单。只有一个string的参数。写出这样一个简单的库,对于任何程序员来说都是一个非常容易的事。可是就是这个简单的库里面却有一颗定时炸弹。这个炸弹随时可能爆炸,把用户的程序炸崩溃。当用户气哼哼的找你的时候,你就知道STL把说明和实现放到一块的坏处了。原来,用户哪儿的,string和你库是的string不是一个版本的。那个炸弹爆了。
这也就是说如果你的程序要和其它的程序以STL的类型交换数据的话,你就要做好连源码一起发步出去的准备。且不说把源码发步出去带来的维护上的灾难。但就保密问题而言,你的源码是能轻易对外发步的吗?
当然,我们不能因为STL有这个毛病就否定STL的丰功伟绩。但STL确实是代码复用道路上的一次倒退。我们可以注意到,象loki,boost这些库,就没有再用一个没任何扩展名的一个文件来做一顶二,一顶三这样的事情。而是使用有了.h(.hpp)这样的做法。明明确确的告诉用户这是一个说明。
也许STL的L就不应该叫做库。要是非要叫库的话,应该把它和静态库及动态库区别开来。
 

转载地址:http://vmooi.baihongyu.com/

你可能感兴趣的文章
华为公开“实现汽车中电子控制功能的系统”相关专利
查看>>
华为Mate40 RS保时捷设计推8+256GB版本:起售价便宜1000元
查看>>
美团股价盘中涨幅超7% 市值重回2万亿港元关口
查看>>
微信又更新了!支持上班摸鱼了
查看>>
《山河令》火爆,人人都想靠耽改剧赌一把
查看>>
让AI打工!搜狗全体员工于3月12日狗胜节放假一天
查看>>
干得漂亮!以后这些内容朋友圈都不能发了
查看>>
还在4S店买车?《Boss1+1》张朝阳对话贾鸣镝“种草”购车新方式
查看>>
蚂蚁集团CEO胡晓明宣布辞任
查看>>
怪兽充电递交IPO招股书:2020年净利润7540万元 阿里为第一大股东
查看>>
当《奇葩说》没了奇葩
查看>>
芯片短缺蔓延至手机市场:骁龙888短缺 三星中低端机型生产受阻
查看>>
用你的视频号“薅”微信流量,这个灰产太野了!
查看>>
苏宁易购回复深交所关注函:深国际和鲲鹏资本非一致行动人
查看>>
亿航智能⻓续航⻜机有望在4-8周内首⻜亮相
查看>>
微信:2021年1月至今封禁了1531个视频号帐号
查看>>
阿里系上市公司老板娘微博喊老公回家!多少创业鸟,已成纷飞燕?
查看>>
keep公众号就“借鉴”原创文章致歉:将停更一周
查看>>
新希望:拟参与设立总规模40亿元的广西新希望生猪保供专项产业基金
查看>>
瑞银:将京东目标价上调至110美元 维持“买入”评级
查看>>