(int)x là ép kiểu kiểu C, còn static_cast<int>(x) dùng trong C++. static_cast<>() cung cấp kiểm tra tại thời gian biên dịch, còn ép kiểu C không hỗ trợ. static_cast<>() có thể dễ dàng tìm thấy trong mã C++. Và dùng ép kiểu C++ này, ý định được truyền đạt rõ ràng hơn.
Trong ép kiểu kiểu C, đôi khi có thể ép con trỏ kiểu này trỏ đến dữ liệu kiểu khác. Ví dụ con trỏ nguyên cũng có thể trỏ đến dữ liệu ký tự, vì chúng khá giống nhau, chỉ khác nhau kích thước: ký tự 1 byte, nguyên 4 byte. Trong C++, static_cast<>() nghiêm ngặt hơn ép kiểu C. Nó chỉ chuyển đổi giữa các kiểu tương thích.
Ví dụ mã
char c = 65; // dữ liệu 1 byte, ASCII của 'A' int *ptr = (int*)&c; // 4 byte
Vì con trỏ 4 byte trỏ đến 1 byte bộ nhớ đã cấp phát, có thể gây lỗi runtime hoặc ghi đè bộ nhớ liền kề.
Trong C++, static_cast<>() cho phép trình biên dịch kiểm tra xem con trỏ và dữ liệu có cùng kiểu hay không. Nếu không, sẽ ném ngoại lệ gán con trỏ không đúng tại thời gian biên dịch.
char c = 65; // 1 byte int *ptr = static_cast<int>(&c);
Điều này sẽ tạo lỗi biên dịch.