1

我来自 C++ 并且只知道一些 Java,但是我对 Java 不完全了解的一件事是强制转换。在 c++ 中,我们有Regular cast vs. static_cast vs. dynamic_cast。在java中,我们有原始类型和对象类型之间的转换(称为装箱和拆箱),原始类型之间的转换,使用Class函数的转换,有时我们执行未经检查的转换。是否有从 Java 的转换系统到 C++ 的转换系统的直接映射?它们是等价的吗?还是一侧有什么独特之处?

4

2 回答 2

2

如果您了解 C++,则可以相当容易地解释 Java 对象模型。类类型的 Java 变量是对相应类型的动态创建对象的引用。已初始化的 Java 变量T x = new T();与 C++ 指针密切对应:T * px = new T;

在 Java 中,所有类类型都继承自多态类型Object,因此所有指针都可以用于 RTTI:Java 类类型变量的所有类型转换都是dynamic_castC++ 中的。因此 Java(S) x对应dynamic_cast<S *>(px)于 C++,具有相同的失败模式,即 null 结果表明动态类型不相关。

所有其他 C++ 指针转换都是不安全的,并且在 Java 中没有等价物。我不知道Java是否有像整数到浮点这样的标量转换;如果是这样,那么这些将与 C++ 转换密切对应。

装箱和原始类型是一个相当独立且不相关的问题。如果你想在 C++ 中做类似的事情,你就会有某种template <typename T> struct Box转换为T运算符的东西。

于 2013-06-22T23:42:39.287 回答
1

简而言之:

将内置类型的强制转换视为 static_cast 和

将对象之间的转换视为 C++ 中的 dynamic_cast。

于 2013-06-22T23:53:44.660 回答