Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt static_cast vs C-style cast trong C++


static_cast là ép kiểu an toàn tại compile-time, trong khi C-style cast (Type)expr kém an toàn hơn.

So sánh

Đặc điểmstatic_castC-style cast
Kiểm tra compile-timeCóKhông
Ép con trỏ không liên quanBáo lỗiCho phép (nguy hiểm)
Độ rõ ràngRõ ràng, dễ tìm kiếmKhó nhận diện
Chuyển đổi constKhông thể bỏ constCó thể bỏ const (const_cast)

Ví dụ lỗi C-style cast

char c = 'A';      // 1 byte
int* p = (int*)&c; // C-style: cho phép, nhưng nguy hiểm!
// p trỏ 4 byte nhưng chỉ có 1 byte hợp lệ -> ghi đè bộ nhớ lân cận

Ví dụ static_cast chặn lỗi

char c = 'A';
int* p = static_cast<int*>(&c); // LỖI COMPILE: invalid static_cast

Khi nào dùng static_cast

  • Chuyển đổi số: float → int, char → int, int → double
  • Chuyển con trỏ trong hệ thống kế thừa (upcast/downcast an toàn)
  • Chuyển enum sang kiểu số nguyên

Ví dụ hợp lệ

float f = 3.14f;
int i = static_cast<int>(f); // i = 3
enum Color { Red, Green };
int c = static_cast<int>(Red); // c = 0