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

static_cast trong C++ - Ép kiểu an toàn


static_cast dùng cho các chuyển đổi kiểu thông thường, được kiểm tra tại compile-time. Thay thế C-style cast an toàn hơn.

Các trường hợp dùng phổ biến

  1. Số học: float → int, int → double, char → int
  2. Con trỏ kế thừa: Upcast (Derived* → Base*), Downcast (Base* → Derived* - khi chắc chắn)
  3. Enum: enum → int
  4. void*: void* → T*

Ví dụ cơ bản

#include <iostream>
using namespace std;

int main() {
    double d = 3.14159;
    int i = static_cast<int>(d);     // 3 (cắt phần thập phân)
    char c = 'A';
    int code = static_cast<int>(c);  // 65 (ASCII)
    cout << i << ' ' << code << '\n';
    return 0;
}

Ví dụ con trỏ kế thừa

class Base { virtual ~Base() {} };
class Derived : public Base {};
class Unrelated {};

int main() {
    Derived* d = new Derived;
    Base* b = static_cast<Base*>(d);      // OK: upcast an toàn
    // Derived* d2 = static_cast<Derived*>(b); // OK nếu b thực sự trỏ Derived
    Unrelated* u = static_cast<Unrelated*>(d); // LỖI COMPILE: không liên quan
    delete d;
}

static_cast KHÔNG làm được

  • Bỏ const / volatile → dùng const_cast
  • Ép kiểu giữa các kiểu không liên quan (reinterpret) → dùng reinterpret_cast
  • Ép kiểu đa hình tại runtime (cần kiểm tra) → dùng dynamic_cast

Tóm tắt 4 cast C++

CastMục đích
static_castChuyển đổi liên quan, compile-time
dynamic_castÉp kiểu đa hình, runtime check
const_castThêm/bỏ const/volatile
reinterpret_castÉp kiểu cấp thấp, bit pattern