C 中所有指標的大小都相同嗎?
這個問題一直是爭論的主題,一些消息來源聲稱所有指針具有相同的大小,而其他人則認為指針的大小可以不同。
根據C 標準,明確保證:
- void 具有相同的大小char
- cv 限定指針(例如,T const、T volatile、T const volatile)與T
指向具有相同基礎類型的枚舉類型的指針具有相同的大小-
雖然標準沒有明確聲明所有指標具有相同的大小,但在實務上通常確實是指向所有類別類型的指標、函數指標、資料成員指標和函數成員指標具有相同的大小。
但是,這個假設並不能 100% 保證,因為技術上允許編譯器玩把戲。例如,他們可以為以特定前綴開頭的類別創建更長的指針,或者如果他們決定為這些類別實現垃圾收集。
在實際場景中,編譯器不太可能利用這種自由。因此,開發人員通常可以假設指向不同類別類型和上述其他類型的指標將具有相同的大小。為了提供進一步的保證,可以實作 static_assert 語句來標記潛在的違規行為。
但是,在具有近指標和遠指標的分段架構中,這些類型的指標可能具有不同的大小。這是具有統一大小的指標的通常規則的例外。
以上是C 中指標的大小總是相同嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!