Java 为什么没有操作符重载

最近一直在看Herb 的 Exceptional C++ 系列书籍 ,Scott Meyer 在书的序中写到,Exceptional C++是一本常常会"make me surprise" 的书,的确,即使使用了C++ 已经很多年,但看这样的书仍然让自己觉得对C++的理解还十分浅薄。

但是正如不断有人提出来的这个问题 - “是系统设计的复杂程度本身需要那么多的知识,经验和技巧还是C++ 自己本身太过复杂” (嗯,我个人的理解是二者皆是 ^_^),Bruce 在 Thinking In Java 4 的序中写到,随着自己不断加深的对Java的理解,越来越了解到Java语言的设计目标就是使得描述和构建复杂系统的工作变得更容易,一个即使只有有限的知识和经验的程序员也能够使用Java来进行某种复杂程度的系统建构工作,Java就是一门更容易,能够在更高的抽象层次上描述系统的语言,也许它不那么高效,有时也显得不够灵活,但是它不会经常让你 surprise...

回到题目的话题,Java为什么没有操作符重载,C++ 的操作符重载是其语言强大与灵活的一个重要特征, 我今年因为工作原因接触过Quatro DSP的模拟器,Quatro DSP是一个用于打印机,扫描仪的数字图象处理器,模拟器本身其实是一个C++库,通过库的支持能够把Quatro DSP的汇编语言转化为合法的C++ 函数调用,从而在C++的集成开发环境(如 VC)中模拟DSP汇编语言的执行,主要工作原理无非是将寄存器定义为某个类类型对象,从而使用宏替换和操作符重载将汇编语言变成函数调用。

C++不但有操作符重载,还有自定义类型转换 (嗯,大多数的C++书籍都会劝你在没有正当理由的情况下千万不用去使用后者),Exceptional C++书中在讲到异常安全代码的章节中有这么一段话 ——

“In particular, it helps to develop a habit of eyeing with mild suspicion anything that might turn out to be a function call --- including user-defineed operators, user-defined conversions, and silent temporary objects among the more subtle cluprits - because any function call might throw.”

"实际上,它会帮你养成这样的习惯,对所有语句都带着怀疑的眼光,猜测这有可能会是一个函数调用 - 包括自定义操作符,自定义类型转换,和一些更是难以捉摸的语境中悄悄产生的临时对象 - 因为函数调用就有可能抛出异常。"

Herb写这段话的目的是为了说明在C++中写异常安全或者异常中立的代码,你必须小心分析那些语句有可能抛出异常,而一个模版代码中的大部分语句都十分有可能是一个函数调用,而函数调用就有可能抛出异常,最后剩下给你的确定不会抛出异常的语句会非常的少... ... 如果你没有做好这样的心理预期,想当然的认为大多数语句都不会抛出异常,那么你被 surprise的几率就会非常之高 ... ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值