Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เหตุใดจึงต้องใช้ static_cast(x) แทน (int)x ใน C ++


The (int)x คือการพิมพ์แบบ C โดยที่ static_cast(x) ใช้ใน C++ static_cast<>() นี้ช่วยอำนวยความสะดวกในการตรวจสอบเวลาคอมไพล์ แต่การแคสต์สไตล์ C ไม่รองรับสิ่งนั้น static_cast<>() นี้สามารถตรวจพบได้ทุกที่ในโค้ด C++ และการใช้ C++ cast นี้จะทำให้สื่อถึงความตั้งใจได้ดีขึ้นมาก

ใน C เช่น cast บางครั้งเราสามารถส่งตัวชี้บางประเภทเพื่อชี้ข้อมูลประเภทอื่น เช่นเดียวกับตัวชี้จำนวนเต็มตัวเดียวก็สามารถชี้ข้อมูลประเภทอักขระได้เช่นกัน เนื่องจากมีความคล้ายคลึงกัน ความแตกต่างเพียงอย่างเดียวคืออักขระมี 1 ไบต์ จำนวนเต็มมี 4 ไบต์ ใน C ++ static_cast<>() จะเข้มงวดกว่า C เหมือนกับการแคสต์ มันแปลงระหว่างประเภทที่เข้ากันได้เท่านั้น

โค้ดตัวอย่าง

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = (int*)&c; //4-byte

เนื่องจากในพอยเตอร์ขนาด 4 ไบต์ จะชี้ไปที่หน่วยความจำที่จัดสรรไว้ 1 ไบต์ จึงอาจสร้างข้อผิดพลาดรันไทม์หรือจะเขียนทับหน่วยความจำที่อยู่ติดกันบางส่วน

ใน C ++ static_cast<>() จะอนุญาตให้คอมไพเลอร์ตรวจสอบว่าตัวชี้และข้อมูลเป็นประเภทเดียวกันหรือไม่ หากไม่เป็นเช่นนั้น จะทำให้เกิดข้อยกเว้นการกำหนดตัวชี้ที่ไม่ถูกต้องระหว่างการคอมไพล์

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = static_cast<int>(&c);

สิ่งนี้จะทำให้เกิดข้อผิดพลาดในการคอมไพล์