“DELPHI与VC口水战”之补白

这里是原文:
http://blog.csdn.net/jiangtao/archive/2001/03/05/1821.aspx

  原文写得不错,不但引经据典,还罗列了十几条大多有统计数据的比较,不过,严格地说,DELPHI是一个IDE,它并不代表PASCAL这门语言,而VC也只是一个IDE,它并不代表C++,而MFC也不是它的全部,那么,把DELPHI与VC相比,到底是比什么呢?
  如果是比“用VCL和MFC分别编写Windows的GUI程序”,那么,的确是VCL易用(我从DELPHI 2开始用到7),这一点勿庸置疑;如果是比编译速度,DELPHI大大领先(但C++Builder却落后于VC);但如果是比PASCAL和C++这两门语言,那么针对原文中的N条对比,我认为:
  • 原文第1条,说C中的宏是垃圾,其实有点过了,只是应该尽量少用罢了。但有的时候,DELPHI里没有宏,就无法很方便地编写用一个编译常量来切换使用ANSI和UNICODE字符的程序(比方说,你不能用#define CreateFile CreateFileW,然后在程序里只用OpenFile)。还有,某些特殊应用需要在程序中N多地方插入相同的代码(比方说盗版验证),用子程序显然容易被找到并破解,如果用宏在程序中到处插入验证代码,就不容易被全部找到了。
  • 原文第6条字符串,的确,DELPHI中的原生String让程序员解脱了,而且它还有很巧妙的引用机制,一个String到处传递的时候,就不要STL中的basic_string模板类,需要复制N个拷贝。不过有了STL,C++程序员总算可以从自己分配字串、自己计算字串长度等噩梦中解脱出来了。
  • 原文第7条,的确,多重继承不是必要,C++虽然允许,但很少用到(iostream是个例子),但原文提到了DELPHI中的Interface关键字,却没有提及编译器把Interface的引用计数封装到编译器中,在背后默默地实现了,这一点很了不起,不仅仅是让程序员不再自己AddRef和Release,更重要的是,编译器保证了一个接口的实例,只要有人在用它,就永远不会被销毁。顺便说一句,DELPHI程序员也不再需要QueryIntface了,只需要很优雅地用一个as就可以了。(在C++里,引用计数也可以用模板类优雅实现。)
  • 原文第8条,DELPHI里没有模板,但也不能简单地说模板只是宏的一种语言实现。DELPHI是单根继承,一切皆TObject,再加上DELPHI天生就是支持RTTI,也许它不需要用模板来支持泛型。而C++中的模板并不是”宏的一种语言实现“,模板是图灵完备的,它可以做到的事情远超过原文作者所想象的范围……没有模板,就没有现代C++的灵魂。
  • 原文第9条,作者建议DELPHI也支持Operator重载……其实C++对运算符的重载是把双刃剑,现在已经到了无法无天的地步,简单地说,你看到PASCAL程序里写A := B + C,或C里写A=B+C,那么可以肯定就是把B和C相加赋值给A,但在C++里可不一定,因为不但加号运算符可以重载,连赋值运算也是可以重载的,如果没有一个约束,整个工程里遍布运算符的重载,那么将会是一场噩梦……
当然,关于C++,我还有一些不吐不快的看法,比方说没有override和new关键字,这一点我喜欢C#,就算是DELPHI,它虽然在覆盖基类同名非虚方法时没有引入new关键字,但也会知趣地给一个警告;再比方说,C++ 允许对整型和指针进行布尔判断,再比方说 对于符合语法但无意义的语句也不会给警告,再比方说……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值