簡體   English   中英

靜態類型是在編譯時還是在運行時強制執行?

[英]Is static typing enforced at compile-time or run-time?

主要詢問我最熟悉的Java / C ++。

  • 類型信息是否僅在編譯時用於檢查正確性然后丟棄? (即,編譯后java是否像python一樣工作?)
  • 類型信息是否保留並再次用於運行時檢查?
  • 每種語言的行為是否有所不同

在Java中,某些類型信息在運行時保留。 這就是為什么您可以獲取java.lang.ClassCastException的原因。 但是,並非全部。 特別是,Java中的泛型使用類型擦除來實現,這意味着在運行時, ArrayList<String>看起來像ArrayList<Integer> (盡管看起來不像HashSet<String> )。

在其他語言中,行為不同。 例如,在C語言中,盡管是靜態類型,您也可以在運行時進行各種操作(例如,將指向字符串的指針復制到包含指向整數數組的指針的變量中),而不會出錯。

C ++中的類型適用於編譯器,是編譯時。 模板不是通用的,它們實際上是編譯器生成靜態類型特定代碼的指令。 例如,您可以調用模板參數的靜態方法,這在Java中在語法上是不可能的。

C ++運行時類型信息可通過typeid / typeinfodynamic_cast運算符(后者可以使用前者)獲得。 但是即使在編譯過程中也可以禁用它,以節省空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM