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

ความแตกต่างระหว่าง static_cast<> และ C-style Casting ใน C++


ที่นี่เราจะดูความแตกต่างระหว่าง static_cast<> และการแปลงแบบ C-style (Normal C cast)

การแปลงแบบ C เช่น (int)x คือ C-style Typecasting ส่วน static_cast<int>(x) ใช้ใน C++

static_cast<> ให้การตรวจสอบในขณะคอมไพล์ (Compile-time Checking) แต่ C-style casting ไม่รองรับ static_cast<> สามารถค้นพบได้ทุกที่ในโค้ด C++ และการใช้ C++ cast ทำเจตนาของโปรแกรมเมอร์สื่อสารได้ชัดเจนกว่า

ใน C-style cast บางครั้งเราสามารถแปลงพอยน์เตอร์ชนิดหนึ่งไปชี้ข้อมูลอีกชนิดได้

เช่น พอยน์เตอร์จำนวนเต็มสามารถชี้ข้อมูลตัวอักษรได้ เพราะค่อนข้างคล้ายกัน แตกต่างกันแค่ Char 1 ไบต์ Int 4 ไบต์ ใน C++ static_cast<> เข้มงวดกว่า C-style casting มันอนุญาตให้แปลงระหว่างชนิดที่เข้ากันได้ (Compatible Types) เท่านั้น

ตัวอย่าง

char c = 65; //ข้อมูล 1 ไบต์ ASCII ของ 'A' int *ptr = (int*)&c; //4 ไบต์

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

ใน C++ static_cast<> จะให้คอมไพเลอร์ตรวจสอบว่าพอยน์เตอร์และข้อมูลเป็นชนิดเดียวกันหรือไม่ ถ้าไม่ใช่ จะยกเลิก Compile-time Error: Incorrect Pointer Assignment

char c = 65; //ข้อมูล 1 ไบต์ ASCII ของ 'A' int *ptr = static_cast<int>(&c);

จะสร้าง Compile-time Error