`
chelsea
  • 浏览: 118195 次
  • 来自: ...
社区版块
存档分类
最新评论

C++批判的批判

    博客分类:
 
阅读更多

1,typedef不必要?

a,typedef提供了一层间接,面向对象语言中,接口掩盖了运行时不同具体类型间的差别,而typedef掩盖了编译时不同类型间的差别,却又不丧失类型安全性
b,一般语言只能返回“值”,而typedef提供了返回“类型”的能力,这是模板元编程不可或缺的机制,除非模板元编程眼下也是不必要的

2,导入

在不同地点分别对#include,private成员放在头文件中,inline函数也放在头文件中进行了批判,实际上原因只有一个:C++不是平台,它没有二进制标准,它编译后成为本地代码,丧失了一切类型信息;只有解决了这个问题,才能解决跟分发重用导入相关的各种问题

3,引用是多余的?会被破坏

a,资源释放问题引用比指针更明确,即提供原始对象一方负责释放资源,而一旦用指针做接口参数,就需要约定谁来释放资源
b,空引用在well-formed的程序中是不存在的,因为产生它的唯一方式是提领空指针,而提领空指针是未定义的行为,程序很快就会出错,而不是像被破坏的指针一样,有些运算出错,有些不出,有时出错,有时不出

C99也加入了对引用的支持

4,直接重复继承

C++缺乏Eiffel拥有的“直接重复继承”机制,但假如有的话,语义是什么呢?没看过Eiffel,不懂

5,多重继承

论述较为精辟,对多重处理的继承是C++的软肋,Java禁止了多重实现继承,但提供的“单实现继承+多接口继承+内部类”却又缺乏灵活性和直观性

6,内部类破坏面向对象?破坏复用性

有失公允,除非面向对象排斥面向接口,复用仅止源代码复用;1,内部类提供更好的封装性;2,内部类经过简单包装后可以以可执行代码的形式提供面向接口的复用,一个例子是“List Collections.unmodifiedList(List)”,可用内部类优雅的实现(不知实际实现如何)

7,virtual/override

C++与C#的做法给了基类作者巨大的责任,而这些本应子类作者承担;包括C++里的虚基类,子类的变化迫使父类作出改动

8,虚拟类型

文中说C++只提供了参数化类,没提供虚拟类型,可从所举的虚拟类型的例子来看,似乎用前文所鄙视的typedef即可完成,不知是否如此.

9,束缚多态

在C++里一般称为模板参数约束,正考虑加入下版标准;但如果只是用在书中所举例子,模板参数约束为实现某个接口,那么用接口做为参数就可以了,为什么还要泛型呢?泛型表达了一种Concept,泛参检查也应该为Concept Check,而不是Type Check

10,访问控制

Eiffel对子类访问权限不加限制只能算是一个特性,未必是优点;基于对复用的两种不同理解和侧重,C++和Eiffel选择了对待子类的两种不同态度;对C++私有继承批评时所举的例子并不恰当,造成问题的根源是强制转型,而不是私有继承

11,展开对象

对“.”和“->”的批评太孤立了,实际上“->”是可重载的操作符,提供了一层间接,利用这层间接可以做很多事情:资源管理,以包容的方式获得继承的便利(自动“拥有”被包容对象的方法)等等;Eiffel提供了“展开对象”,不知具体语义如何

12,直接重复继承

翻到这里才看到了Eiffel中直接重复继承的一种用处:原来是为了在子类中调用父类同名方法;随着Precursor加入语言,这种用法也可以被抛弃了

13,抗变与协变

返回值协变似乎没多大问题,参数抗变似乎也没多大问题,问题在于参数协变;Eiffel提供了Current和like来解决,C++只能期待受束泛型了

14,强制针对接口编程

作者认为父类中的public成员在子类中重定义时改为protected或private会带来协变问题,其实只要重定义函数的语义正确,也没什么;而且这种变化会带来另外一种效果:强制针对接口编程;因为此时你的客户程序员只能通过父类来引用你的子类对象才能访问重定义的成员

15,垃圾收集

还是那些话题,还是那些论调,还是对内存外的资源管理避而不谈;难道不能“析构函数+栈对象+堆对象垃圾收集”?C++只不过缺省缺少“堆对象垃圾收集”,智能指针还能撑一会,Java和Eiffel则缺少“栈对象+析构函数”

16,契约式设计与CORBA IDL

作者认为CORBA IDL不支持契约式设计是一个缺陷,可我从来不敢在我的DCOM,RMI,.Net Remoting组件中使用断言,包括最初的socket server;这可是暴露在网络环境中啊,违反前置条件是要抛异常的啊;WebService稍好一点,明确定义了异常处理,有中间件支持

分享到:
评论

相关推荐

    C++批判(第三版)

    《C++批判(第三版)》是一本针对C++编程语言深入探讨的书籍,它以其独特的视角和深刻的分析,对C++的各个方面进行了有力的批判和反思。这本书旨在帮助那些已经有一定C++基础或者对C++有浓厚兴趣的读者更好地理解和...

    C++批判 C++ Critique

    《C++批判 C++ Critique》是一本深入探讨C++编程语言优缺点的书籍,它主要针对C++的复杂性、效率、可维护性等方面进行了分析和评价。在这个讨论中,我们将聚焦C++的一些核心特性,包括面向对象编程、模板、异常处理...

    c++ 经典资料之 C++ 批判(第三版)

    10. **C++批判**:作为书名的核心部分,书中可能会探讨一些对C++的常见批评,如学习曲线陡峭、语言复杂性高、编译时间长等,并提供应对策略。 通过阅读《C++ 批判(第三版)》,读者不仅可以深化对C++的理解,还能...

    c++批判(第三版)

    《C++批判(第三版)》是一本深入探讨C++编程语言的专著,作者以批判性的视角,全面分析了C++的优缺点、设计哲学及其在实际开发中的应用。这本书旨在帮助读者理解C++的强大功能,同时也揭示了其潜在的问题和陷阱。...

    C++批判(第三版)

    C++批判(第三版)介绍C++的一本资料,说明C++有哪些不足之处

    C++批判(第三版).rar

    《C++批判(第三版)》是一本深入探讨C++编程语言特性和实践的书籍,旨在帮助读者理解和掌握C++的核心概念,同时揭示其潜在的问题和挑战。书中的内容涵盖了函数重载、继承的本质、虚函数、全局分析以及类型安全连接...

    c++批判(第三版,英文版)

    ### C++批判(第三版,英文版):深入解析与批评 #### 一、引言 《C++批判》(第三版)是一本由Ian Joyner编写的书籍,旨在对C++语言及其在1990年代编程领域的趋势进行深入分析和批判。本书通过细致的分析,探讨了...

    C++批判

    《C++批判》一文深入探讨了C++编程语言的实现细节和本质,旨在帮助开发者不仅熟练运用,更能理解其背后的原理,从而提升程序的质量和效率。C++作为一门高级语言,融合了过程化编程、面向对象编程以及泛型编程等多种...

    最权威的C++书籍集合

    个人认为最权威的C++著作,包括: c++程序设计语言第三版; iso_c++标准.pdf c++编程思想第二版第一卷和第二卷; effectivec++;...c++批判(第三版).pdf; 高质量C++编程指南.doc,此书对求职的朋友很有帮助;

    如何学好C++语言

    #### 二、培养批判性思维 在学习C++的过程中,养成良好的质疑习惯至关重要。这意味着不仅要学习C++的语法和特性,还要深入了解每项特性背后的设计理念。例如: 1. **拷贝构造函数**:理解为何需要拷贝构造函数以及...

    C++ 程序员成长中最常走的 4 条弯路

    这样不仅可以加深对知识的理解,还能培养批判性思维和创新精神。 总之,C++程序员的成长之路充满了挑战,但只要能够识别并避免上述弯路,就能更快地成长为一名出色的C++开发者。不断学习、实践和反思,是每个程序员...

    Thinking C++中文版

    书中的思考题和练习旨在帮助读者巩固所学,并鼓励他们批判性地思考编程问题。这是一次全面而深入的C++学习之旅,将为读者构建坚实的编程基础,使他们能够应对各种复杂的软件开发挑战。 总的来说,《Thinking in C++...

    A Critique of C++.rar

    《C++批判》这篇文章主要探讨了C++编程语言的一些关键特性、优缺点以及在实际应用中的挑战。C++,由Bjarne Stroustrup于1983年创建,是一种中级语言,它结合了面向对象编程(OOP)、泛型编程和过程化编程的特性。...

    小学一二年级C++启蒙 集训训练课程体系(2023.10.25)H.pdf

    C++启蒙课程体系 本课程旨在培养小学一、二年级学生的编程能力,通过C++编程语言的学习,提高学生的逻辑思考能力、专注细心、耐性、抽象思考能力、信息整理能力、国际性沟通能力、团队合作能力、空间思考能力、解决...

    云大C++实验以及实验报告

    一份优秀的实验报告应清晰地展示出实验的设计思路、代码实现和结果验证,同时对可能出现的错误进行分析和改进,体现批判性思考。 总之,云大C++实验和实验报告的实践过程,旨在使学生掌握C++语言的核心知识,并通过...

    [Online]A_Critique_Of_C++_3rd.zip

    《C++批判性分析》第三版在线资源压缩包包含了对C++编程语言深入而全面的探讨。这本书籍,由知名编程专家撰写,旨在提供对C++的深入理解,同时揭示了该语言的一些潜在问题和挑战。以下是根据标题、描述以及包含的PDF...

Global site tag (gtag.js) - Google Analytics