[英]Is static typing enforced at compile-time or run-time?
主要询问我最熟悉的Java / C ++。
在Java中,某些类型信息在运行时保留。 这就是为什么您可以获取java.lang.ClassCastException
的原因。 但是,并非全部。 特别是,Java中的泛型使用类型擦除来实现,这意味着在运行时, ArrayList<String>
看起来像ArrayList<Integer>
(尽管看起来不像HashSet<String>
)。
在其他语言中,行为不同。 例如,在C语言中,尽管是静态类型,您也可以在运行时进行各种操作(例如,将指向字符串的指针复制到包含指向整数数组的指针的变量中),而不会出错。
C ++中的类型适用于编译器,是编译时。 模板不是通用的,它们实际上是编译器生成静态类型特定代码的指令。 例如,您可以调用模板参数的静态方法,这在Java中在语法上是不可能的。
C ++运行时类型信息可通过typeid / typeinfo和dynamic_cast运算符(后者可以使用前者)获得。 但是即使在编译过程中也可以禁用它,以节省空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.