2012-04-09 55 views

Trả lời

17

Với static_cast. Lưu ý rằng bạn chỉ phải làm điều này nếu con trỏ thực sự trỏ đến một đối tượng thuộc kiểu được chỉ định; có nghĩa là, giá trị của con trỏ tới void được lấy từ một con trỏ đến một đối tượng như vậy.

thing * p = whatever(); // pointer to object 
void * pv = p;   // pointer to void 
thing * p2 = static_cast<thing *>(pv); // pointer to the same object 

Nếu bạn thấy mình cần làm điều này, bạn có thể muốn suy nghĩ lại về thiết kế của mình. Bạn đang từ bỏ sự an toàn về loại, giúp bạn dễ dàng viết mã không hợp lệ:

something_else * q = static_cast<something_else *>(pv); 
q->do_something(); // BOOM! undefined behaviour. 
+3

Không, điều đó không hữu ích; nó sai. Sử dụng 'reinterpret_cast'. –

+0

@MarceloCantos: Tại sao bạn lại sử dụng một dàn diễn viên nguy hiểm hơn cả vai diễn bạn cần? –

+2

+1 @MarceloCantos: Không, thực sự là đúng. 'static_cast' được sử dụng để đảo ngược chuyển đổi tiềm ẩn và con trỏ lớp thành con trỏ void là một chuyển đổi ngầm định. –

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