Tôi ít nhầm lẫn với phạm vi áp dụng của reinterpret_cast
vs static_cast
. Từ những gì tôi đã đọc các quy tắc chung là sử dụng truyền tĩnh khi các loại có thể được giải thích tại thời điểm biên dịch do đó từstatic
. Đây là diễn viên mà trình biên dịch C ++ sử dụng nội bộ cho các diễn viên ngầm.
reinterpret_cast
s được áp dụng trong hai kịch bản:
- chuyển đổi các kiểu số nguyên thành các loại con trỏ và ngược lại
- chuyển đổi một loại con trỏ sang loại khác. Ý tưởng chung tôi nhận được là điều này là không thể tin được và nên tránh.
Trong đó tôi có một chút bối rối là một cách sử dụng mà tôi cần, tôi đang gọi C ++ từ C và mã C cần phải giữ đối tượng C ++ để về cơ bản nó giữ một void*
. Diễn viên nào nên được sử dụng để chuyển đổi giữavoid *
và loại Class?
Tôi đã thấy việc sử dụng của cả hai static_cast
và reinterpret_cast
? Mặc dù từ những gì tôi đã đọc, nó xuất hiện static
tốt hơn vì dàn diễn viên có thể xảy ra vào thời gian biên dịch? Mặc dù nó nói để sử dụng reinterpret_cast
để chuyển đổi từ một loại con trỏ sang loại khác?
reinterpret_cast
không xảy ra trong thời gian chạy. Cả hai đều là các báo cáo thời gian biên dịch. Từ en.cppreference.com/w/cpp/lingu/reinterpret_cast : "Không giống như static_cast, nhưng giống như const_cast, biểu thức reinterpret_cast không biên dịch theo bất kỳ lệnh CPU nào. (biểu diễn đối tượng) của biểu thức như thể nó có kiểu new_type. "