[英]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>
我應該使用 reinterpret_cast ......這是正確的嗎?
正確......前提是首先需要這樣的演員,這是罕見的。
.. 因為這給了我一個編譯時檢查整數變量是否足夠大以適合一個指針。 那是對的嗎?
不正確。 與 c 風格轉換相比,沒有額外的警告保證。 Reinterpret_cast 是首選,因為它更明確並且不允許拋棄 const。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.