上一篇中,主要是对C++类设计的一个概览。如果你认为那写得很肤浅,并能明确指出问题所在,那么恭喜你,可以说,你对C++的类机制有了更深入的了解!
这并不是说上篇笔记中有什么错误,前文仅仅就B.S.概述当中的某几句进行了适当的联想,但不能说全面、深入。其中提及的好多思想,方法只是针对C++类设计当中的类别:“具体类”的设计与实现。其他诸如层次结构的、多态的、范型的设计实现方法,可能不在此限,因为这是后续专题的主要任务。希望大家能够理解。
//---------------------------------------------------------------
Tips:“简单而通俗的东西,从统计上来看,远比那些复杂而玄妙的东西重要的多。” -- B.S.
“使用类型系统去检查函数的参数,去保护数据不被意外地破坏,去提供新的类型,去提供新的操作,如此等等,这些在C++里都没有增加任何运行中的时间或者空间开销”
“C++设计的目的之一,是使一个平均行的C++代码能够表达出远比一个平均行的C或Pascal代码更多的东西。”
“一个声明了函数参数类型、使用了自定义类等机制的C++程序,通常比没有使用这些功能的等价C程序短一些;在那些使用了库的地方,C++程序就要比等价的C程序短的多。”
1.4历史注记
“……这个语言已经经过了广泛的审查和精炼。……所有这些扩充和修订的主旨都是为了是C++能够成为一个能更好编写、使用库的语言。”
1.5 C++的使用
“我认为C++不应在底层的效率上妥协,这就使我们有可能用C++写设备驱动程序、或者其他需要在实时约束下直接操作硬件的软件。”
这几句话分散在原书中的不同章节,我把它们放到一起是因为我觉得这几句话都是在讲一个事情:效率。作者反复含蓄、但也毫不退让的指出,C++无论其最初的设计目的还是最终的实践检验都从来没有向效率妥协过。C++的目的是为了能够保持C的执行效率的基础上而大大提高程序的开发效率、扩大语言所能处理问题的覆盖面。
我也曾经动摇过,认为C++的优雅、高效的开发效率是与执行期间的效率进行妥协的产物,就好像java一样。可是作者明确的提出这是一种偏见。他曾说,C++完全可以胜任诸如驱动、操作系统以及对实时性要求很高的管理软件的任务。回顾我的第一个作品,我认识到,也许很多人都犯了与我相同的错误:把由于自己编程习惯、风格而造成的效率低下,归咎于C++语言本身。之所以这么说,是因为每次维护、修改我的第一个作品(这是一个商用软件)时候我都发现,当时为了在规定的时间内完成任务,而放弃良好的设计思想、以及优雅、严谨、高效的编程风格,是一件多么愚蠢的行为。我所付出的带价不仅仅是丑陋的代码,还有昂贵的后期维护开销(包括时间和金钱上的)。更可惜的是浪费了一次能够培养出思想与风格的机会。
不扯远,还是说回效率。在那个不成熟的作品当中,我为了节省时间,而大量的使用了变量的按值存储、传递、返回等等。这些在一个release的大型的项目当中,所需要的系统开销简直是无法接受的。第一阶段的试验性的开发也许可以尝试,但是在成熟的作品当中都必需经过优化。如明确区分栈空间和堆空间;尽量使用引用机制和指针;以及一些函数算法、调用、返回等等许多方面的优化。
C++完全兼容C,而且C的语言和思想是C++的最坚固的基石。这其中有另外一层意思也就是说C中执行的高效率思想也应该在C++中体现;诸如类机制、泛型设计以及模板只是一种C++语言为了提高开发效率所支持的几种语义表达方式。采用他们之前,我们应该再三问我们自己:“我要实现的任务是否确实需要用到这些高级的机制?如果需要,这种机制是否牺牲了执行期间效率?如果是,那么对于这种牺牲,我或我的客户是否可以接受?”我们不能够为了编程而编程,不能为了技巧而编程,我们基本的目标是:在尽可能短的开发周期里,用尽可能安全、简洁、高效的语言完成所规定的任务;稍微高层次的要求是我们应该提供最广泛的可适用性(或者说可扩展性),以及优雅的、易于维护的表达风格;最高层次的目的,则是在这一系列开发过程中,享受设计、创造的乐趣。
1.7 有关在C++里编程的思考
1.8 忠告
读完这两节,我就一个字,“基本帅呆了”。大师就是大师,那种去繁就简、返璞归真不是一般速成的所谓高手能够装出来的;那种发自内心的、毫不做作的谦虚、包容的精神也愈发的令人敬仰。
我在这两小节的旁白处只写下了这样一句话:“无论你是第几次翻开本书,都请再仔细研读本节!”
分享到:
相关推荐
八年级物理全册1.3站在巨人的肩膀上我国的四大发明素材新版沪科.doc
综上所述,卓越商企服务在商务物业管理领域具有一定的竞争优势,其业务模式、区域扩张策略、增值服务发展以及母公司支持都为其未来的发展提供了良好的基础。然而,投资者在做出投资决策时还需考虑市场风险和行业动态...
绿洲APP产品分析报告:站在巨人肩膀上能否看得更远?.pdf
站在巨人的肩膀上,_迁移学习_Transfer_Learning
站在巨人的肩上——XX借势营销策划.doc
站在巨人的肩上泛德林恩借势营销策划.docx
本教程资源"ios-站在巨人的肩膀上-scrollView联动.zip"可能包含了一个名为"XYSlideMenu"的示例项目,旨在帮助开发者理解并实现ScrollView的联动效果。 ScrollView联动的核心是通过监听ScrollView的滚动事件,将滚动...
站在巨人的肩上--泛德林恩借势营销策划.doc
小米集团作为一家以生产家用电器起家并迅速发展的科技公司,其商业模式和市场策略为家用电器行业带来了新的思考。小米集团的成功可以归结为几个关键因素:硬件产品作为核心,极致性价比的产品特点,以及基于物联网的...
本项目“站在巨人肩膀上制作的异步非阻塞IM”是一个基于Java语言实现的高效通信平台,它巧妙地利用了现有的开源技术和工具,以解决大规模并发下的高性能通信问题。以下将详细阐述这个项目中的关键知识点。 首先,...
站在巨人的肩膀上:分层设计在 Nervos 生态系统中的 layer 2区块链上的实际应用-SACC2021年中国系统架构师大会
本项目“站在巨人肩膀上制作了异步非阻塞的IM”充分利用了Java的优势,构建了一个高效、灵活的多协议通讯解决方案。 首先,异步非阻塞编程模型是现代高性能网络应用的核心。传统的同步阻塞模型在处理高并发时容易...
资源描述让你站在HTML巨人的肩膀上,制作非常酷炫的HTML前端web幻灯片。通过使用资源描述,你可以轻松地添加各种动画效果,使你的网页更加生动有趣。无论是淡入淡出、滑动、旋转还是缩放,你都可以通过资源描述实现...
【标题】中的“站在巨人的肩膀上的项目,感谢zhile大佬的Pandora-Next项目”表明这是一个基于他人开源项目进行开发或改进的项目。这里的“Pandora-Next”可能是一个由用户“zhile”创建的开源项目,它很可能在Python...
只有善于观察市场动态,深挖平台潜力,灵活应对变化,才能在互联网大潮中把握住机遇,站在巨人的肩膀上取得成功。在这个过程中,对开放平台的深刻理解和巧妙运用,将成为企业在互联网时代变革中立足的关键。
【知识点详解】 1. 指南针:指南针是我国古代...这些发明展示了中国古代科技的卓越成就,它们不仅在国内发挥了重要作用,而且对全球科技发展产生了深远的影响,是站在这些巨人肩膀上,人类社会得以不断进步的基础。
在C++编程中,错误处理是一项至关重要的任务,因为它们能帮助我们发现并修复程序中的问题,从而提高软件的质量和稳定性。...记住,每一次错误都是学习的机会,站在前人的经验上,我们可以走得更远。
【构建公有云平台上的容器服务】的主题由俞圆圆(Y3)提出,她是UCloud基础云产品中心的总监,有着丰富的实践经验,曾在Microsoft Windows Azure和Amazon AWS EC2任职,专注于大规模分布式系统、面向服务架构、TCP/IP...