快速业务通道

神话与谬误:争论C++前你应当知道什么

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
追捧呢。另一个动机则是学了这些技术有立竿见影的炫耀效果,比如在论坛上。这可比编写可维护代码的才能容易表现多了——人自然是更倾向于去关注那些更容易拿来表现和炫耀的东西的。退一步说,就单单是“发明”一项新的语言特性组合运用技巧都能带来纯粹的成就感,因为你又在现有语言框架下作出了一个创举,你做了别人做不到的。而作为学习者,你可能会因为发现原来自己理解的一块土地上还有不知道的东西而感到兴奋和新奇,这种兴奋和新奇感往往是学习的真正原动力。至少,对于我来说,当年读《Modern C++ Design》时正是这样一种感觉,我想有和我一样感觉的人肯定不在少数。

再来,一个是在人前看不见摸不着的编码能力,另一个是对handy的技巧的掌握。作为一个学习者,倾向于学习后者,因为后者学起来更容易,而且也往往更有趣。学到了之后能够得到跟解决重大问题同等的成就感——看看《Effective C++》系列受到的追捧就知道了。

再来,当你面临两个问题,一个是如何建立一个高质量的库(大),一个是如何修正库里面的小bug(如vector里面某个成员函数的异常保证问题)。如果你有一份时间,你更倾向于把它花在什么地方?人在心理上总是倾向于走“捷径”的,体现在这个问题上面便是更倾向于对付耍点小聪明就解决的小问题,并获得甚至并不亚于解决大问题的成就感。小问题的另一个吸引人的地方在于它耗时短,更“趁手”,它不需要你闭关苦苦编码几个月弄出一个框架来而且还不一定能成。所以这就给人一种错觉,C++社群只知道争论枝节问题,不知道实干库。哦,不是错觉,这的确是大部分的现状,但这个现象其实并不仅仅止于C++社群,这是人心理的共性造成的,这也就是为什么无论在哪个语言社群你都会看到争论最多的都是些“小问题”的原因。(当然,无论在哪个学科,也还总是有牛人去啃难啃的骨头的。但这并不是广大民众的状况。) 以上种种原因共同造就了C++社群的这种心态。

这其实跟C++的“教义”没有关系。C++如果有教义的话也是实用为上。这种现状是自发产生的,它的动力来源于人的心理。如果Java语言有各种各样的特性组合,且这些特性组合能够某些时候满足开发中的实际需求的话,也是一样会出现这样的情况的(事实上一个小小的Java Closure就已经引起了大量口水了)。某种程度上,LISP里面用函数来实现自然数系统,也是一样的道理,你敢说,你第一次看到它的时候,不惊叹?人之常情而已。 那这种哲学对不对?废话。当然不对。不但不对,而且有害。很多C++日常开发者在学习库开发技巧上浪费了很多时间,掌握了根本用不到的技术,而且这些技术,不如称为技巧,可能还会随着语言进化变得根本无用武之地。还不如好好学学如何让自己的代码更KISS呢,基本的编码准则要远远重要得多,正如我刚才说的,日常开发,一本《The C++ Programming Languag》加一本《C++ Coding Standard》足够了。

另外,说到语言进化顺便说一句,语言进化的职责之一便是废黜繁复的技巧,取代以直接表达思想的语言特性。而C++0x真正在履行这一职责。 最后来说一说前面留下来的一个问题:为什么C++设计的初衷——“不要固执于完美”——某种程度上带来了这个局面呢?

因为正是因为这种理念的指导,有不少语言特性从理论上都是不完备的:比如有copy语意没有move语意(有左值引用没有右值引用),于是Alexandrescu用Mojo框架来解决;比如支持可变参数的函数调用却不支持可变参数的模板参数列表,导致用元编程来解决;比如不支持构造函数转发,导致必须factor出一个公共的initialize函数来;比如不支持强类型的enum,结果用一大堆宏结合类来解决;比如不支持initializer list

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号