में एम्परसैंड 'और' और स्टार '*' प्रतीकों का अर्थ दस्तावेज को अच्छी तरह से पढ़ने के बावजूद, मैं &
और *
जंग के प्रतीक के बारे में उलझन में हूं, और आमतौर पर जंग के संदर्भ के बारे में क्या अधिक है ठीक ठीक। , निम्नलिखित कोड ठीक उसी काम करता हैजंग
fn main() {
let c: i32 = 5;
let rc = &c;
let next = rc + 1;
println!("{}", next); // 6
}
हालांकि:
इस उदाहरण में, यह एक सी ++ संदर्भ के समान (अर्थात, एक पते से, जो इस्तेमाल किया dereferenced है) हो रहा है
fn main() {
let c: i32 = 5;
let rc = &c;
let next = *rc + 1;
println!("{}", next); // 6
}
*
का उपयोग संदर्भ को संदर्भित करने के लिए C++ में सही नहीं होगा। तो मैं समझना चाहता हूं कि यह जंग में क्यों सही है।
मेरे समझ अब तक, यह है कि, एक जंग संदर्भ यह dereferences के सामने *
डालने, लेकिन *
परोक्ष वैसे भी डाला जाता है ताकि आप इसे (जोड़ने की जरूरत नहीं है, जबकि सी ++ में, यह परोक्ष डाला जाता है, और यदि आप इसे सम्मिलित करें आपको संकलन त्रुटि मिलती है)।
हालांकि, कुछ इस तरह संकलित करता है नहीं:
fn main() {
let mut c: i32 = 5;
let mut next: i32 = 0;
{
let rc = &mut c;
next = rc + 1;
}
println!("{}", next);
}
<anon>:6:16: 6:18 error: binary operation `+` cannot be applied to type `&mut i32` [E0369]
<anon>:6 next = rc + 1;
^~
<anon>:6:16: 6:18 help: see the detailed explanation for E0369
<anon>:6:16: 6:18 note: an implementation of `std::ops::Add` might be missing for `&mut i32`
<anon>:6 next = rc + 1;
लेकिन यह काम करता है:
fn main() {
let mut c: i32 = 5;
let mut next: i32 = 0;
{
let rc = &mut c;
next = *rc + 1;
}
println!("{}", next); // 6
}
ऐसा लगता है कि निहित dereferencing (एक ला सी ++) अपरिवर्तनीय संदर्भ के लिए सही है , लेकिन परिवर्तनीय संदर्भों के लिए नहीं। ऐसा क्यों है?
धन्यवाद, अब मैं समझता हूं। असल में, मैंने सोचा था कि यह ऐसा कुछ हो सकता है लेकिन मैंने विचार को खारिज कर दिया था, सोच रहा था कि एक पूर्णांक के योग को उस पूर्णांक के पते के साथ परिभाषित करना बहुत अजीब होगा। शायद इस दस्तावेज़ में जोर दिया जाना चाहिए कि जंग संदर्भों को पते के रूप में माना जाना चाहिए, और सी ++ संदर्भों से भ्रमित नहीं होना चाहिए। विस्तृत स्पष्टीकरण के लिए फिर से धन्यवाद। –