ในที่นี้เราจะมาดูกันว่า static_cast<> และการใช้สไตล์ C แบบปกติแตกต่างกันอย่างไร
การร่ายปกติเช่น (int)x คือการพิมพ์แบบ C โดยที่ static_cast
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);
สิ่งนี้จะทำให้เกิดข้อผิดพลาดในการคอมไพล์