簡體   English   中英

將指針轉換為整數時,我應該使用 reinterpret_cast 嗎?

[英]When converting pointers to integers, should I be using reinterpret_cast?

我的理解是,當從指針轉換為整數時,我應該使用 reinterpret_cast,因為這樣可以在編譯時檢查整數變量是否足夠大以適合指針。 那是對的嗎?

與只是在我沒有保證的情況下進行轉換並且在從 32 位環境移動到 64 位環境時最終可能會截斷地址不同?

1. reinterpret_cast表示重新解釋底層位模式。 這意味着 C 中的顯式轉換,例如:

void *vptr; 
int *iptr = (int *)(vptr);

你應該知道 reinterpret_cast 是不安全的,轉換的正確性由你自己決定。

如果您需要類型安全轉換,請使用static_cast ,這意味着類型之間的隱式轉換或類型安全轉換。 常用於數值類型之間

2.可能會導致截斷,使用精確字長的int類型是合適的。 int64_t包含<cstdint>

  1. 你永遠不應該這樣做(這種情況非常罕見的例外)。 請解釋為什么你需要這個。
  2. 指針在特定平台上具有固定大小。
  3. 標准提供與每個平台uintptr_t / intptr_t的指針大小相匹配的整數類型定義。

我應該使用 reinterpret_cast ......這是正確的嗎?

正確......前提是首先需要這樣的演員,這是罕見的。

.. 因為這給了我一個編譯時檢查整數變量是否足夠大以適合一個指針。 那是對的嗎?

不正確。 與 c 風格轉換相比,沒有額外的警告保證。 Reinterpret_cast 是首選,因為它更明確並且不允許拋棄 const。

暫無
暫無

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

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