浊氏浅见:C++被误用之因

上周因工作的关心,有幸使用boost.spirit生成了一个简单的语法解析器。在此过程之中,深被C++的灵活扩展所折服。就我粗浅的认知,C++语言的灵活性在众多编程语言之中属于上乘。若是要论兼具灵活性与运行时效率,c++语言是我所见过语言中出色又出色的一个。

珍爱生命,远离VC6.0

可是,就是这样一门语言,在编程界得到的不仅仅是赞誉,还有不少的抱怨。实际工作之中,也会有一些小公司因为“效率”的顾及而去选择使用C++。结果是也许程序运行时的效率得到了微不足道的提高,可整体开发维护所付出的代价并不一定低。

那么,究竟是何种原因导致这样的结果呢?我对此进行了一点思考。

首先,为了证明C++是如此优秀与灵活。 请允许我用以下几行代码演示:


fstream file("C:\\1.txt");   

 std::string content(

     istreambuf_iterator<char>(file),  (istreambuf_iterator<char>())

);

以上的代码实现的是将文件中所有字符存入到一个字符串对象之中。这算是C++er工作之中常会遇到的需求。

这样的代码看上去很美,如果你在自己的项目工程里发现了这样一段代码,十有八九会觉得很惊喜。

然而简单的任务、行数较少的代码却不是所有入门C++程序员都能写出。这是问题的关键处。

C++灵活与优雅的前提是你对它足够了解,它由各式各样抽象的概念作为拼图的一部分,你要熟悉足够多的基础知识,才能对其得心应手。

就像是双截棍,你看李小龙在电影里耍的虎虎生风,自己真弄一个手上玩,很少有不砸到自己头的。美国洛杉矶警方因为李小龙风靡的原因,曾短暂时间内列装过双截棍作为警察们的近身武器。最后也是因为太难驾驭的原因放弃了。

就以上两行行代码,其便使用了泛型、iterator、stream_buff、functional object等诸多概念。这些东西,对于像我这样刚入门的程序员而言,单拎出来哪一个都不太简单,更别论组合起来玩出花样了。

然而这还仅仅是STL中对C++语言的使用。若是更进一步深入了Boost,了解一下Phoenix、Fushion、Spirit等库,你会更加的感叹C++原来可以这么“花”。

同样是读文件所有内容到字符串中,其它高级语言也通常只需要一两行代码。看似代码行数差不多,然而,其中所涉及的抽象概念却比C++要少的太多太多。

比如Python:

file = open("c:\\1.txt")

content = file.read()

print(content)

你看,open是内置函数,返回一个文件对象,一个read函数调用,返回包含所有内容的字符串。

C++同样两三行代码包含了太多抽象。相比之下,python要显得直观的多。

出于历史、运行时效率等诸多方面的原因。C++语言一直是程序员开发中的主流。

可C++语言本身的设计就有非常大的跨越性。你既可以用它写传统如C的过程式程序,也可以如C#一般,纯粹的简单的以类为中心,更可以模版与重载齐飞,一宏又一宏玩出花样。

你采用一种方式的C++写出的代码,可能习惯另一种方式的程序员会有如看天书,甚至会觉得是另一种语言。(boost.spirit 就是蒙着C++皮的另一种语言

C++被如此多误用的原因兴许在此。那么如何避免这个问题呢?

事实上,这个世界上存在着许多管理良好的C++工程典范。比如Chromium (Chrome)开源项目。

C++极其灵活的设计是为了给予我们无限的可能。实际工作中,我们的需求千奇百怪,因此灵活性是有必要的。更进一步,当我们确定下来时,我们需要的灵活性也许只是那么一两种,因此控制是有必要的。

使用C++,在享受其无与伦比的灵活性时,必然要学会去管理他的复杂(这个世间有太多事物都是有利有弊的)。而恰恰这一点被许多人所忽视(或者力不从心)。

以上是我个人的一点粗浅看法

化浊 2017-04-05

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容