为什么使用C++
准模板库,tr1/tr2组件等)。最终,就会发现这件可能会被很多人忽略的事情——有时KISS依靠抽象。我想,Matthew Wilson在他的新书“Extended STL,Vol1”的序言中,极其透彻地阐明了这个观点。书中提到了两段代码,分别用C和C++编写:
我想,这能很清楚地说明,为什么即使人们不需要使用类和模板的时候还是应该使用C++——你会发现便捷的C++类库是多么有用。类似地,如果一个高效的容器(或者一个巧妙的指针)可以使你摆脱所有手工操作内存的麻烦工作,那么,还有什么理由要使用那些原始的malloc/free?如果一个好的string类(我不是在说std::string;人人都知道这不是C++做的最好的)或者regex类可以使你摆脱所有你看都不想看的混乱的字符串处理代码,那么还有什么理由要选择手动做这件事情呢?如果一个“transform”(或‘for_each’)语句可以如此简单明了地一行就完成你的工作(当然,我知道C++做这件事需要lambda函数的支持),那么,还有什么理由要手动写for-loops循环?如果高定制的函数真的能实现你想要的功能,那么,还有什么理由使用笨拙的工作区来完成同样的事务呢? KISS并不意味着“粗糙”;KISS的意思是为你的工作选择最适合的工具,“最适合”意味着你所使用的工具能尽可能直接(和简洁)的帮助你表达你的想法。只要它不影响代码的可读性和易懂性。 现实问题 人们可能会说C++很容易会用错,而相反,C通常更容易管理和操控。一个中等水平的C++程序员可能会写出一大串联系紧密的类,而很快这些类就会变成一堆垃圾。但这实际上只是个别情况。一方面,在任何面向对象语言中都会经常发生这样的事情。总是有一些程序员,他们敢于在类之上再定义类,而他们甚至还不知道什么是HAS-A和IS-A;他们学习了所有定义一个类和从其他类继承一个类的语法,他们就觉得掌握了OOP的本质。另一方面,为什么问题会出现在C++中,是因为C++有很多阻止设计的复杂之处,是因为C++如此灵活,以至于每个用C++解决的问题都有很多可选的解决方案(考虑所有的GUI类库),以至于权衡选择哪种解决方案就成了艰巨的工作。C++的附属复杂性是一个历史遗留问题,C++0X做了多番努力试图摆脱这个问题;关于设计的灵活性并不是一件坏事——如果你考虑到它可以帮助好的设计师做出好的设计;如果有人谴责它,因为这样浪费了自己很多脑细胞,那这只是个人问题,而不是语言问题,或许这样的人就不应该负责做设计。如果你担心你的C++编程伙伴因为受这些高水平特征的诱惑而使得你的工程代码一团遭,那么,或许你应该建立一个编码标准并强制执行它(或者你可以遵循the collective wisdom,或者坚持C规范,或者带有C++类的C规范),而不是因为存在风险而退缩放弃(政策可以避免风险),因为如果不这样做,你将再也不能接触所有C++类库。 另一方面,存在着最重要的心理上问题——如果一个语言中存在一个稀奇古怪的性质,那么最终就会有人发现它,然后人们就会被它吸引,这就会吸引那些本来在努力做一些有用的事的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |