में ऑटो का उपयोग जब मैं पॉइंटर प्रकार को कम करने के लिए auto
का उपयोग करता हूं, तो मुझे एक अजीब घटना मिली। मेरे कोड इस तरह है:सी ++ 11
#include <iostream>
using namespace std;
int main()
{
int i = 100;
auto p1 = &i;
auto *p2 = &i;
cout << *p1 << " " << *p2 << endl;
return 0;
}
संकलन और क्रियान्वित करने के बाद, हम पा सकते हैं कि *p1
और *p2
का परिणाम एक ही है, दोनों 100 इसका मतलब यह है p1
और p2
दोनों एक सूचक वस्तु जो एक int
की ओर इशारा कर रहे हैं वस्तु।
[[email protected] ~]$ ./test
100 100
कि इन दो बयानों जो p1
और p2
परिभाषित के बीच कोई अंतर है?
बेशक, और क्या संभवतः हो सकता है? यदि पी 1 और पी 2 दोनों पॉइंटर्स नहीं थे तो आप उन्हें 'और i' के साथ प्रारंभ नहीं कर सके।हो सकता है कि आपको 'ऑटो * पी 2' 'ऑटो * पी 2' के संदर्भ में 'ऑटो * पी 2' के संदर्भ में लिखना चाहिए (और सोचें) कि यह स्पष्ट करने के लिए कि 'p2' एक सूचक प्रकार का चर है, जिसमें संकलक द्वारा स्वचालित रूप से निर्धारित किया गया है । –
'ऑटो * पी 2 = init()' कच्चे सूचक प्रकार को लागू करता है। उदाहरण के लिए उपयोगी हो सकता है किसी दिन 'init() 'को' shared_ptr 'वापस करने के लिए दोबारा प्रतिक्रिया दी जाती है और इस मान को कॉपी करने और स्मृति में' टी' रखने के बजाय, आपको संकलन त्रुटि मिलती है और यह तय करने का मौका होता है कि 'shared_ptr ', 'weak_ptr' का उपयोग करना है या नहीं ', या' टी & '। –
jingyu9575
यही कारण है कि 'ऑटो' जादुई और संभावित रूप से भ्रमित दोनों है। टेम्पलेट तर्क कटौती नियम का उल्लेख करने के लिए –