Computer >> Máy Tính >  >> Lập trình >> C ++

Tại sao sử dụng static_cast (x) thay vì (int) x trong C ++?


(int) x là kiểu gõ kiểu C trong đó static_cast (x) được sử dụng trong C ++. Static_cast <> () này cung cấp cơ sở kiểm tra thời gian biên dịch, nhưng kiểu ép kiểu C không hỗ trợ điều đó. Static_cast <> () này có thể được phát hiện ở bất kỳ đâu bên trong mã C ++. Và bằng cách sử dụng C ++ này, các tương tác được truyền tải tốt hơn nhiều.

Trong C như ép kiểu đôi khi chúng ta có thể ép kiểu một số con trỏ kiểu để trỏ một số dữ liệu kiểu khác. Giống như một con trỏ số nguyên cũng có thể trỏ dữ liệu kiểu ký tự, vì chúng khá giống nhau, chỉ khác là ký tự có 1 byte, số nguyên có 4 byte. Trong C ++, static_cast <> () nghiêm ngặt hơn C như ép kiểu. Nó chỉ chuyển đổi giữa các loại tương thích.

Mã mẫu

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = (int*)&c; //4-byte

Vì trong con trỏ 4 byte, nó trỏ đến 1 byte bộ nhớ được cấp phát, nó có thể tạo ra lỗi thời gian chạy hoặc sẽ ghi đè lên một số bộ nhớ liền kề.

Trong C ++, static_cast <> () sẽ 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, nó sẽ đưa ra ngoại lệ gán con trỏ không chính xác trong quá trình biên dịch.

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = static_cast<int>(&c);

Điều này sẽ tạo ra lỗi thời gian biên dịch.