2010-02-04 29 views
5

Trong C++ cho bất kỳ loại dữ liệu tôi có thể làm như sau:Loại dàn diễn viên nào từ Type * đến void *?

Type* typedPointer = obtain(); 
void* voidPointer = typedPointer; 

mà dàn diễn viên được thực hiện khi tôi gán Type* để void*? Điều này có giống với

Type* typedPointer = obtain(); 
void* voidPointer = reinterpret_cast<void*>(typedPointer); 

hoặc là một số diễn viên khác?

Trả lời

4

Đây là chuyển đổi con trỏ chuẩn. Vì nó là một chuyển đổi tiêu chuẩn, nó không yêu cầu bất kỳ diễn viên rõ ràng.

Nếu bạn muốn sao chép hành vi của chuyển đổi đó bằng dàn diễn viên rõ ràng, nó sẽ là static_cast, không phải reinterpret_cast.

Định nghĩa của static_cast được nêu trong 5.2.9/2, static_cast có thể thực hiện tất cả các chuyển đổi có thể được thực hiện hoàn toàn.

2

Đó là cùng một dàn diễn viên. Bất kỳ con trỏ nào cũng có thể được truyền tới một con trỏ void.

4

Từ Type* đến void* chuyển đổi ẩn có sẵn. Bạn có thể sử dụng static_cast để làm rõ ý định của mã. Đối ngược lại bạn cần reinterpret_cast

EDIT: Theo nhận xét cho điều ngược lại cũng static_cast có thể được sử dụng. Đã thử một đoạn mã mẫu và nó thực sự biên dịch. Đã không biết điều đó và luôn sử dụng reinterpret_cast để truyền từ khoảng trống *.

4

Nó không phải là một diễn viên, nó là chuyển đổi tiềm ẩn. Casts rõ ràng theo định nghĩa. Nó không phải là diễn viên nhiều hơn:

char c = 'a'; 
int i = c; 

là.

Các vấn đề liên quan