我来自C ++并且只知道一些Java,但有一件事我不完全了解java是铸造。在c ++中,我们有Regular cast vs. static_cast vs. dynamic_cast。在java中,我们在基本类型和对象类型之间进行转换(称为装箱和拆箱),在基本类型之间进行转换,使用Class
函数进行转换,有时我们执行未经检查的转换。是否有从Java的演员系统到C ++的演员系统的直接映射?他们相同吗?或者有什么东西在一方是独一无二的吗?
答案 0 :(得分:1)
如果您了解C ++,则可以非常轻松地解释Java对象模型。类类型的Java变量是 references ,以动态创建相应类型的对象。初始化的Java变量T x = new T();
与C ++指针紧密对应:T * px = new T;
在Java中,所有类类型都继承自多态类型Object
,因此所有指针都可用于RTTI:所有Java类类型变量的转换都是{C}中dynamic_cast
的转换。所以Java的(S) x
对应于C ++中的dynamic_cast<S *>(px)
,具有相同的失败模式,null结果表明动态类型不相关。
所有其他C ++指针强制转换都是不安全的,在Java中没有等价物。我不知道Java是否有像整数到浮点的标量转换;如果是这样,那么这些将与C ++转换密切对应。
拳击和原始类型是一个相当独立且无关的问题。如果您想在C ++中使用类似的东西,那么template <typename T> struct Box
会有一些转换为T
运算符。
答案 1 :(得分:1)
简而言之:
将内置类型的强制转换视为static_cast和
将对象之间的强制转换视为C ++中的dynamic_cast。