2013-06-22 253 views
0

我来自C++,只知道一些Java,但有一点我不完全了解java是铸造。在C++中,我们有Regular cast vs. static_cast vs. dynamic_cast。在java中,我们在原始类型和对象类型(称为装箱和拆箱)之间进行投射,在原始类型之间进行投射,使用Class函数进行投射,有时我们执行未检查的投射。是否有从Java的投射系统到C++的投射系统的直接映射?他们是否等同?或者在某一方面有独特的东西吗?Java的铸造和C++的铸造

+1

什么是“常规演员”? –

+1

@KerrekSB:我提供的链接解释了它。 – keelar

+1

我不会考虑装箱,因为它会创建新的实例。这只是一个编译器的便利,可以用来完成“新的Integer(myInt)”等等。 – SJuan76

回答

1

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

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

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

拳击和原始类型是一个相当独立和不相关的问题。如果你想在C++中使用类似的东西,你会得到某种类型的template <typename T> struct Box,并将其转换为­。

1

简而言之:

想想从铸件内置类型为的static_cast的和

想想对象之间的强制类型转换为dynamic_cast的在C++。