说实话,为了解决同样的问题,能不用C++我就尽量不用C++,因为,我觉得C++编程太繁琐了!为什么这样说?且听我慢慢道来。

C++,作为一种程序语言,有着非常精美和简练的语法。和C一脉相承的C++,其简练的语法推卸掉了太多的责任,把绝大部分工作压在了库(library)的身上。这一点,在当时是被广为传颂的优点。“设计一个库比增加一个语言特性更好”,Stroustrup[Rev01]如是说。确实,看现在流行的C#, Java, Python, Ruby,携数量庞大的类库之威,都照着这条道路坚定地前进,但显然,他们比C++走的更好。

因为,C++标准库的先天不足,不仅使得精美和简练的语法难以造成同样优雅的代码,而且可怜的程序员们还不得不在每个项目中一次又一次地发明轮子——作为选择C++的代价。

不优雅的代码:

这主要是由于顾及安全原因而采取的保护性编程造成的后果。在一波又一波的攻击、木马、病毒的洗礼下,在一个又一个著名的漏洞面前,在大师们的譐譐教导下,我们都知道了strcpy是个非常危险的函数。也知道了strlen有可能使你的程序大门洞开。

于是,我们都学会了传说中的“保护性编程”:

在操作每个字符串的时候,我们都小心翼翼地丈量好它的长度,声明固定大小的缓冲区,然后再仔细检查返回值,随后才安心地继续前进。我们每个人都知道了太多标准库函数的实现细节,从而不得不在我们的客户代码中耐心地避开那些众所周知的缺陷。大概MS也看不下去了,strcpy一干人等在VC++2005中干脆被声明为deprecated,MS建议你使用更加安全同时也不是非常好用的strcpy_s等替代者。

类似的保护性编程还有网络应用程序中,对虚弱的socket类函数的精心呵护……ACE的使用者肯定对此深有体会。

发明轮子:

如果说安全性原因是部分由于C++兼容C所带来的缺陷,标准库的不完善却是不容置疑的事实了。这种不完善是方方面面的:从IO处理、字符串使用,到错误处理策略、线程操控和常用工具类/函数的缺乏,处处让我们的编程捉襟见肘。标准库中难得的亮点就是STL,为我们提供了一套比较稳定且功能足够强大的容器和算法。

还拿字符串来说,C++标准库第二次修订时引入的string泛型类被宣扬成char[]和wchar_t[]的良好替代品。但是,用MFC的人却发现,为了保持和MFC框架的兼容,他们不得不使用CString作为字符串类型;第一次接触ACE的人也会惊奇地发现,Douglas C.Schmidt积极地推荐人们使用ACE_TEXT宏构建字符串,因为这能更好地移植;同样,几乎每个大量处理文本的C++项目都有自己的字符串类,只是为了弥补string的一点点缺陷(比如,string和char*的随意转换就不是一上手就能学会的……)。

不要告诉我说除了标准库,还有这个库,那个库……完全不同的类库风格造成了非常陡峭的学习曲线,同时,我们还不得不注意到这些优秀的库同样在重复制造轮子——为的只是弥补标准库的先天缺陷。当然,最后补一句,boost库的加入也许会使C++标准库声威大壮,但是,标准库能否完全消化风格迥异的库,boost是否能够解决上述问题,还是一个未知数。

如果你从没用过C/C++以外的语言,不妨试试C#,Java,Perl,Python,Ruby……也许你会发现一片新天地。不识庐山真面目,只缘身在此山中。

[Rev01] C++语言的设计和演化,Bjarne Stroustrup著,裘宗燕 译,机械工业出版社,2001。

推荐!

标准库——C++的阿基里斯之踵相关推荐

  1. AI的阿基里斯之踵:模糊性

    来源:IEEE电气电子工程师学会 摘要:网罗全球科技前沿动态,为科研创业打开脑洞. 很多年前,我和一位朋友去参观一个果园.他的儿子是这个果园的经理,向我们介绍了其工作.我的这位朋友和我都是工程师,开始 ...

  2. 破解芝诺悖论之阿基里斯追乌龟

    版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/15333481 阿基里斯是古希腊神话中善跑的英 ...

  3. 增量日志迭代同步和阿基里斯悖论

    假设我们有一套数据量庞大的前台系统需要从MySQL上转到Hbase上,比较粗糙的数据同步方法有: 1.将整个前台系统变为只读 2.全量dump MySQL数据 3.将MySQL数据导入到Hbase上 ...

  4. 阿基里斯永远追不上乌龟

    芝诺是古希腊一个极善于诡辩的哲学家.他的一个众人皆知的"阿基里斯永远追不上乌龟"的诡辩是这样的:阿基里斯是古希腊神话中善跑的英雄.假设乌龟先爬一段路然后阿基里斯去追它.芝诺认为阿基 ...

  5. “阿基里斯和乌龟”与逻辑推理的各向异性

    有一个很有名的"阿基里斯和乌龟"的故事,说的是古希腊勇士阿基里斯有一天要和一只乌龟赛跑,乌 龟和他打赌说,只要阿基里斯让乌龟先跑一段,然后再追它,那么不管阿基里斯跑得有多快,也永远 ...

  6. 阿基里斯追乌龟的思考,空间,时间,速度非连续

    高中的时候才接触和了解,诺阿基里斯追乌龟的悖论,一直萦绕在自己的心头.在上大学的时候,学习了微积分,自己以为自己懂了,但是最近又思考的时候,发现大学里的那种想法还是存在着一些矛盾,自己没有意识到.再度 ...

  7. 标准解读全新工业自动化机器人—2022年海格里斯HEGERLS推出新型库宝箱式仓储机器人系统

    智能仓储系统作为提升物流效率的重要环节,正经历着自动化.智能化升级调整过程,以实现更佳的消费者满意.近日以来,海格里斯HEGERLS仓储货架厂家推出了一款厂仓一体的柔性物流自动化解决方案,提供覆盖自动 ...

  8. 海格里斯智能自动化立体库仓储管理系统 物流生鲜电商冷链立库应用

    随着人们经济生活水平的不断提高,对其高端食品方面的需求也在不断上升,以及现在全社会人民对食品安全的重要性,不难发现食品冷链物流也紧跟其后,这也促使了冷链物流领域已逐渐成为各大企业所关注的热点.当然,在 ...

  9. 自动化立体仓库使用流程!海格里斯自动化立体库流程:入库——出库——拣选

    随着现代物流行业的不断进步,我们可以发现自动化立体仓库已成为现代物流系统中重要的一个组成部分,它不但可以减轻人工劳动强度,还可以节省地面面积,可以很轻松的避免一些不必要的故障出现,同时还可以提高仓库的 ...

最新文章

  1. python浪漫表白代码
  2. js_Event Loop(笔记)
  3. asp.net C#压缩打包文件例子
  4. 在工作中有被动转主动的体会_积极主动应对眼前的一切,就是对自己最好的犒赏...
  5. python文档字符串_结构化的python文档字符串,对IDE友好
  6. [教程]JS从糊涂到明白:一步一步编写计算器2 – 简化代码
  7. Day2 : iOS第三方框架MBProgressHUD学习笔记
  8. 1090 危险品装箱 (25 分)
  9. 解析Vue.js中的computed工作原理
  10. cmake 2.8.12在redhat 4.4下安装
  11. NoSQL之Redis非关系数据库(redis概述,持久化,RDB持久化,AOF持久,内存碎片)
  12. Redis 如何分析慢查询操作
  13. Enterprise Solution 解决方案与源代码下载
  14. linux下编程语言,linux下各种编程语言安装
  15. 随机森林(独立思考的重要性)
  16. 快速突破面试算法之链表篇
  17. Ae效果控件快速参考:3D 通道
  18. 【Godot】行为树(一)了解与设计行为树代码
  19. 梦回山海推广码jn0010 梦回山海推广码
  20. Git reset --hard commit_id 和 git reset --soft commit_id

热门文章

  1. systemctl使用
  2. 数据结构(C语言版)——链栈(代码版)
  3. Android设置TextView可滚动
  4. 三菱触摸屏常见3种故障问题和处理方法
  5. 一、Excel学习——基础应用(WPS)
  6. [数据分析与可视化] 数据绘图要点6-数据组过多
  7. rust有没有房子教材_rust新版本房子设计图大全 | 手游网游页游攻略大全
  8. [转载]侦测隐藏进程
  9. 梦幻西游-北京1区-紫禁城-帮派-楚国(编号:3985)的一生、梦幻西游2-帮派升级规模的时候被解散了...
  10. 什么是“老婆”(看完我哭了)