ฉันกำลังสับสนเล็กน้อยกับการบังคับใช้ของVSreinterpret_cast
จากสิ่งที่ฉันได้อ่านกฎทั่วไปที่ใช้งานหล่อแบบคงที่เมื่อชนิดสามารถตีความที่รวบรวมเวลาด้วยเหตุนี้คำว่าstatic_cast
static
นี่คือ cast คอมไพเลอร์ C ++ ที่ใช้ภายในสำหรับการร่ายโดยปริยายด้วย
reinterpret_cast
s ใช้งานได้ในสองสถานการณ์:
- แปลงประเภทจำนวนเต็มเป็นประเภทของตัวชี้และในทางกลับกัน
- แปลงประเภทตัวชี้หนึ่งเป็นประเภทอื่น แนวคิดทั่วไปที่ฉันได้รับคือสิ่งนี้ไม่สามารถพูดได้และควรหลีกเลี่ยง
ฉันอยู่ที่ไหนน้อยสับสนเป็นหนึ่งในการใช้งานที่ฉันต้องการฉันโทร c ++ จากซีและความต้องการรหัส C จะยึดมั่นในการ C ++ void*
วัตถุดังนั้นโดยทั่วไปมันถือ คาสต์ใดที่ควรใช้เพื่อแปลงระหว่างvoid *
และประเภทคลาส
ฉันได้เห็นการใช้งานของทั้งสองstatic_cast
และreinterpret_cast
? แม้ว่าจากสิ่งที่ฉันได้อ่านดูเหมือนstatic
จะดีกว่าที่นักแสดงสามารถเกิดขึ้นได้ในเวลารวบรวม? แม้ว่ามันจะบอกว่าจะใช้reinterpret_cast
ในการแปลงจากประเภทตัวชี้หนึ่งไปสู่อีกประเภทหนึ่ง?
reinterpret_cast
ไม่ได้เกิดขึ้นในเวลาทำงาน พวกเขาทั้งสองงบรวบรวมเวลา จากen.cppreference.com/w/cpp/language/reinterpret_cast : "ซึ่งแตกต่างจาก static_cast แต่เช่น const_cast นิพจน์ reinterpret_cast ไม่ได้รวบรวมคำสั่ง CPU ใด ๆ มันเป็นคำสั่งของคอมไพเลอร์อย่างแท้จริงซึ่งสั่งให้คอมไพเลอร์รักษาลำดับของบิต (การแทนวัตถุ) ของการแสดงออกราวกับว่ามันมีประเภท new_type "