Cast เป็นออเปอเรเตอร์พิเศษที่บังคับให้ชนิดข้อมูลหนึ่งแปลงเป็นอีกชนิดหนึ่ง เป็นออเปอเรเตอร์แบบ unary และมี precedence เท่ากับออเปอเรเตอร์ unary อื่นๆ
รูปแบบ cast ทั่วไปที่สุดที่คอมไพเลอร์ C++ รองรับส่วนใหญ่คือ
(type) expression
โดยที่ type คือชนิดข้อมูลที่ต้องการ มีออเปอเรเตอร์ casting อื่นๆ ที่ C++ รองรับ ดังนี้
const_cast<type> (expr) ใช้เพื่อ override const และ/หรือ volatile ใน cast โดยชัดเจน ชนิดเป้าหมายต้องเหมือนกับชนิดต้นทาง ยกเว้นการเปลี่ยนแปลงแอตทริบิวต์ const หรือ volatile การแปลงประเภทนี้จัดการแอตทริบิวต์ const ของออบเจกต์ที่ส่งผ่าน ไม่ว่าจะตั้งค่าหรือลบออก
dynamic_cast<type> (expr) ทำการ cast ในรันไทม์ (runtime cast) ที่ตรวจสอบความถูกต้องของการ cast หากไม่สามารถ cast ได้ จะล้มเหลวและนิพจน์ประเมินค่าเป็น null dynamic_cast ทำ cast บน polymorphic types และสามารถ cast pointer A* เป็น B* ได้ก็ต่อเมื่อออบเจกต์ที่ชี้ไปจริงๆ เป็น B object
reinterpret_cast<type> (expr) เปลี่ยน pointer เป็น pointer ชนิดอื่นใดก็ได้ ยังอนุญาตให้ cast จาก pointer เป็นชนิดจำนวนเต็ม และในทางกลับกัน
static_cast<type> (expr) ทำ nonpolymorphic cast ตัวอย่างเช่น ใช้ cast base class pointer เป็น derived class pointer ได้
ออเปอเรเตอร์ casting ทั้งหมดที่กล่าวมาจะใช้ขณะทำงานกับคลาสและออบเจกต์ ตอนนี้ลองตัวอย่างต่อไปนี้เพื่อเข้าใจออเปอเรเตอร์ cast แบบง่ายที่มีใน C++ คัดลอกและวางโปรแกรม C++ ต่อไปนี้ในไฟล์ test.cpp และคอมไพล์และรัน
โค้ดตัวอย่าง
#include <iostream>
using namespace std;
int main() {
double a = 21.09399;
float b = 10.20;
int c;
c = (int) a;
cout << "Line 1 - Value of (int)a is: " << c << endl;
c = (int) b;
cout << "Line 2 - Value of (int)b is: " << c << endl;
return 0;
}
ผลลัพธ์ตัวอย่าง
Line 1 - Value of (int)a is: 21 Line 2 - Value of (int)b is: 10