静态类型是在编译时还是运行时强制实施的?
Is static typing enforced at compile-time or run-time?
主要是问我主要熟悉的java/c ++。
- 类型信息是否仅在编译时用于检查正确性,然后被丢弃?(即Java在编译后是否像Python一样工作?
- 类型信息是否保留并在运行时再次用于检查?
- 此行为是否因语言而异
在 Java 中,某些类型信息保存在运行时。 这就是为什么你可以得到java.lang.ClassCastException
s。 不过,并非全部都是。 特别是,Java中的泛型是使用类型擦除实现的,这意味着在运行时,ArrayList<String>
看起来像一个ArrayList<Integer>
(虽然它看起来不像HashSet<String>
(。
在其他语言中,行为有所不同。 例如,在 C 中,尽管有静态类型,你可以在运行时做各种各样的事情(例如,将指向字符串的指针复制到包含指向整数数组的指针的变量中(。
C++中的类型用于编译器,并且是编译时。模板不是泛型,它们实际上是编译器生成特定于静态类型的代码的指令。例如,您可以调用模板参数的静态方法,这在 Java 中在语法上是不可能的。
运行时类型信息C++可通过 typeid/typeinfo 和 dynamic_cast 运算符(后者可以使用前者(获得。但即使在编译过程中也可以禁用此功能以节省空间。
相关文章:
- 通过switch和static_cast访问多态对象的运行时类型
- 如何在void*指针下检查运行时类型(允许简单类型,没有基类)?
- 获取派生模板实例化的运行时类型
- 运行时类型推断和代码重复
- UWP,加载窗口运行时组件 == 请求的窗口运行时类型 "..." 未注册
- 为什么C++不按运行时类型销毁对象?
- 运行时类型定义
- 在C++中如何将运行时类型鉴别器映射到模板实例(无需手动枚举所有实例)
- 编译器不可知的运行时类型信息
- C++中高效的运行时类型检查
- 运行时类型信息的奇怪行为
- 运行时类型信息(为什么此代码不起作用)
- 运行时类型检查
- C++基于运行时类型实现强制转换
- C++运行时类型与 Python 模块不匹配
- 循环unique_ptrs的向量,并为运行时类型调用正确的重载
- 处理运行时类型未知的模板
- 自定义C++的运行时类型系统/库
- 基于运行时类型实例化构造函数
- 运行时类型在c++中的转换,如何