era*_*ran 10 c++ java language-comparisons equals equality-operator
在关于使用typeid is C++的问题中,我建议它可以用来比较对象比较中的类型.我没有看到它做得太多,但我考虑到了Java equals.
再看看Java,似乎就是这种情况:有人说应该比较两个对象的实际类,有人说 instanceof是正确使用的工具,可能是双重调度.当然,有两种情况中的一种最终更合适,但至少考虑两种选择.
在C++,OTOH中,我几乎找不到比较实际类型的代码.在大多数情况下,使用双重调度(with dynamic_cast),我找不到任何坚持快速类型比较的人在相等检查开始时做正确的事情.
我想知道为什么多态类型比较的问题在Java中有两个可接受的解决方案,而在C++中,只有一个似乎被认为是最佳实践?是否存在重大的技术差异,或者只是不同的方法?
注意:我的主张是基于印象而非具体知识.如果它们是错的并且Java和C++在这方面确实相似 - 或者由于上述原因之外的其他原因而不同,那么它显然是一个可接受的答案.
在Java中,所有类型最终都源自Object并Object
定义了一个虚函数Object.equals(Object other),因此您可以将任何内容与其他任何内容进行比较,无论它是否有意义.在C++中,没有单一的基础,也没有隐含的定义==. ==通常只有在有意义时才会被覆盖,用于比较相同类型的对象,如果你编写无意义的代码,编译器会抱怨.在存在继承层次结构的情况下,当然由作者决定是否==有意义(我通常不会,但有很多例外),如果是,那么它应该意味着什么比较不同类型的对象.在层次结构,或者在它之外的:它可能是有意义的支持==之间BigInteger和
BigFloat,例如,即使类没有继承关系.
当然,你没有看到C++中讨论的问题的原因是因为你没有定义,==除非它有一些逻辑意义,然后你根据逻辑意义定义它.在Java中,您通常必须定义equals
,因此您必须"发明"一些含义,并且您可以讨论发明的含义应该是什么.
| 归档时间: |
|
| 查看次数: |
2367 次 |
| 最近记录: |