How does a C++ reference look, memory-wise? -


दिया गया:

  int i = 42; इंट जे = 43; इंट कश्मीर = 44;  

वेरिएबल्स पतों को देखते हुए, जो हम जानते हैं कि प्रत्येक में 4 बाइट्स (अधिकांश प्लेटफ़ॉर्म पर) लगते हैं।

हालांकि, पर विचार:

  int i = 42; पूर्णांक में & amp; J = i; इंट कश्मीर = 44;  

हम देखेंगे कि वेरिएबल i वास्तव में 4 बाइट्स लेता है, लेकिन j को none और K फिर से ढेर पर 4 बाइट लेता है।

यहाँ क्या हो रहा है? ऐसा लगता है कि j बस क्रमशः में मौजूद नहीं है। और एक संदर्भ के बारे में मुझे फंक्शन तर्क के रूप में क्या मिलता है? <<उस

और जब भी हम उस पर हैं - मैं एक सरणी या संदर्भ को परिभाषित क्यों नहीं कर सकता

  int और amp; [] arr = नया इंटी एंड [SIZE]; // कंपाइलर त्रुटि! संदर्भों की सरणी अवैध है  

हर जगह संदर्भ j है का सामना करना पड़ता है, इसे मैं का पता से बदल दिया जाता है। तो मूल रूप से संदर्भ सामग्री का पता संकलन समय पर हल होता है, और इसे चलाने के समय में एक सूचक की तरह dereference की आवश्यकता नहीं है।

बस स्पष्ट करने के लिए कि मैं के पते से क्या मतलब है :

  शून्य फ़ंक्शन (int & x) {x = 10; } Int main () {int i = 5; पूर्णांक में & amp; J = i; समारोह (जे); }  

उपरोक्त कोड में, j को मुख्य स्टैक पर स्थान नहीं लेना चाहिए, लेकिन फ़ंक्शन का संदर्भ x उसके स्टैक पर एक स्थान लेगा। इसका अर्थ है कि जब फ़ंक्शन को j के साथ एक तर्क के रूप में बुलाता है, मैं का पता जो कि फ़ंक्शन । कंपाइलर जे के लिए मुख्य स्टैक पर स्थान आरक्षित नहीं कर सकता।

सरणी भाग के मानकों का कहना है:

< Blockquote>

सी ++ मानक 8.3.2 / 4:

संदर्भों का कोई संदर्भ नहीं होगा, संदर्भों का कोई सरणी नहीं है, और संदर्भों के लिए कोई संकेत नहीं होगा।


Comments

Popular posts from this blog

email - PHP mail error ... failed to open stream : permission denied -

c# - ListView onScroll event -

c - Linux mmap() error -