जब unix-socket
को देखते हुए, मैं इस कोड में आए:एक पंक्ति में एक परिवर्तनीय कच्चे सूचक में दो कास्ट करना आवश्यक क्यों होगा?
let timeout = unsafe {
let mut timeout: libc::timeval = mem::zeroed();
let mut size = mem::size_of::<libc::timeval>() as libc::socklen_t;
try!(cvt(libc::getsockopt(self.0,
libc::SOL_SOCKET,
kind,
&mut timeout as *mut _ as *mut _,
&mut size as *mut _ as *mut _)));
timeout
};
मैं विशेष रूप से इन पंक्तियों के बारे में उत्सुक था:
&mut timeout as *mut _ as *mut _,
&mut size as *mut _ as *mut _
क्यों है उस में एक परिवर्तनशील कच्चे सूचक करने के लिए दो डाले प्रदर्शन के लिए आवश्यक एक पंक्ति? एक बार केवल एक बार कास्ट करने के लिए पर्याप्त क्यों नहीं होगा?
आह, मुझे यह मिल गया। स्पष्टीकरण देने के लिए धन्यवाद! फॉलो-अप प्रश्न: क्या 'होटॉकॉप्टी' के हस्ताक्षर के कारण जंग दूसरे रूपांतरण को अनुमानित करता है या यह है कि अगर मैं अक्सर रूपांतरण करता हूं तो * प्रत्येक * सूचक को '* mut c_void' पर डाला जाता है? यहां तक कि एक मनमाना मूल प्रकार के लिए, मान लें कि 'और mut Vec'? –
नहीं, शुक्रिया नहीं! यह डरावना होगा: एस वास्तव में 'होटॉकॉप्टी' के हस्ताक्षर की वजह से है, विशेष रूप से क्योंकि अभिव्यक्ति की स्थिति में लक्ष्य प्रकार है। वही मामला होगा। यदि आप 'ptr: * mut c_void = और mut timeout * mut _ as * mut _;' के रूप में कर रहे थे। –