Trong void* a
, a
được khai báo là con trỏ không thuộc loại void
mà là loại "bất kỳ" (trường hợp đặc biệt). Một địa chỉ (vị trí trong bộ nhớ) được gán cho a
, như bất kỳ biến nào khác đang được khai báo, tất nhiên.
Sau đó, biểu thức &a
được đánh giá để khởi tạo biến (cũng a
, nhưng điều này không liên quan) vừa được khai báo. Loại &a
là "con trỏ trỏ đến bất kỳ loại nào", đây là trường hợp đặc biệt của "con trỏ tới bất kỳ loại nào", hoàn toàn tương thích với loại a
. Ergo, không có thông điệp trình biên dịch.
Hệ quả: không sử dụng void*
nếu bạn muốn kiểm tra loại mạnh. Mọi thứ đều có thể được chuyển đổi thành nó. Chỉ ngược lại theo hướng ngược lại, ngoại trừ void*
chính nó (nó sẽ là một ngoại lệ không cần thiết mà một loại không tương thích với chính nó).
Ngoài ra, AFAIR thực sự này xuất phát từ C.
Nguồn
2013-08-14 06:42:12
[Point của Tuyên bố] (http://msdn.microsoft.com/en-us/library/179x7xb9.aspx) –
[Point của Tuyên bố trong C++] (http://stackoverflow.com/a/15746272/952747) – deepmax
Nên đề cập đến lý do tại sao bạn muốn làm điều này - để có được một con trỏ đến đỉnh của ngăn xếp (từ đó bạn có thể fiddle với tất cả các loại của sự vật). – OrangeDog