[英]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.