दिलचस्प पोस्ट
अधिकतम http हैडर मानों पर? निष्क्रिय घटना श्रोताओं क्या हैं? Django में उपयोगकर्ता नाम के रूप में ईमेल पते को स्वीकार करना WPF DataGrid – एक कॉलम में बटन, जिस पर वह क्लिक ईवेंट हैंडलर पर आया था, वह पंक्ति प्राप्त कर रहा है फ़ैक्टोरियल का उपयोग जावा में पुनरावर्ती Entity Framework मॉडल के साथ परियोजना के लिए विभिन्न परियोजनाओं में POCO कक्षाएं उत्पन्न करें सी ++ में कोई आधार वर्ग क्यों नहीं है? लंबे समय से चलने वाले कार्य पर डोम रिफ्रेश नोडजेएस: बेस 64 एन्कोडेड स्ट्रिंग को द्विआधारी को कैसे डीकोड करना है? हम कैसे जांच सकते हैं कि कोई फ़ाइल मौजूद है या Win32 प्रोग्राम का उपयोग नहीं कर रहा है? विधि प्रविष्टि डीबगिंग का उपयोग करते समय डीबग किए गए प्रोग्राम धीमा क्यों करता है? स्थैतिक आरंभीकरण आदेश फसिंक क्या मैं सिर्फ सीएसएस के उपयोग से बूटस्ट्रैप आइकॉन को रंग जोड़ सकता हूँ? कार्य का उपयोग कब किया जाए। देरी, थ्रेड का उपयोग कब किया जा रहा है। जावा में फ़ाइल परिवर्तित श्रोता

क्या सी ++ 11 में एक सूचक के 'ऑटो' प्रकार कार्य को '*' की आवश्यकता होती है?

मेरे वेरिएबल को एक पॉइंटर दिया गया है, अगर मैं इसे "ऑटो" प्रकार के एक चर में निर्दिष्ट करता हूं, तो क्या मैं "*" निर्दिष्ट करता हूं?

std::vector<MyClass> *getVector(); //returns populated vector //... std::vector<MyClass> *myvector = getVector(); //assume has n items in it auto newvar1 = myvector; // vs: auto *newvar2 = myvector; //goal is to behave like this assignment: std::vector<MyClass> *newvar3 = getVector(); 

मैं थोड़ा भ्रमित हूँ कि यह कैसे सी ++ 11 में काम करता है (यह सी ++ 11 के लिए एक नई सुविधा है, है ना?)

अद्यतन: मैं उपरोक्त संशोधित करने के लिए बेहतर ढंग से स्पष्ट करता हूं कि मेरे सदिश वास्तव में किसी फ़ंक्शन में कैसे बसा हुआ है, और मैं सिर्फ लौटा सूचक को किसी चर में निर्दिष्ट करने का प्रयास कर रहा हूं। गलतफहमी के लिए खेद है

Solutions Collecting From Web of "क्या सी ++ 11 में एक सूचक के 'ऑटो' प्रकार कार्य को '*' की आवश्यकता होती है?"

 auto newvar1 = myvector; // vs: auto *newvar2 = myvector; 

इनमें से दोनों समान हैं और std::vector<MyClass> लिए एक संकेतक घोषित करेंगे (यादृच्छिक स्थान की ओर इशारा करते हुए, चूंकि myvector आपके उदाहरण में myvector होता है और संभवतः कूड़ा होता है) । तो मूलतः आप उनमें से किसी एक का उपयोग कर सकते हैं। मैं auto var = getVector() को पसंद करता हूं, लेकिन आप auto* var = getVector() लिए जा सकते हैं यदि आपको लगता है कि यह इरादे पर बल देता है (वह var एक सूचक है) बेहतर है

मुझे कहना होगा कि मैंने कभी भी ऐसा ही अनिश्चितता का auto का उपयोग करने का सपना देखा था मैंने सोचा था कि लोग केवल auto इस्तेमाल करेंगे और इसके बारे में सोचना नहीं होगा, जो कि 99% सही है – auto साथ सजाने की ज़रूरत केवल संदर्भ और सीवी-क्वालिफायर के साथ होती है

हालांकि, जब थोड़ा बदलाव होता है, तब दोनों के बीच थोड़ा अंतर होता है:

 auto newvar1 = myvector, newvar2 = something; 

इस मामले में, newvar2 एक सूचक होगा (और कुछ भी होना चाहिए)।

 auto *newvar1 = myvector, newvar2 = something; 

यहां, newvar2 पॉइन्टेई प्रकार है, उदा। std::vector<MyClass> , और initializer पर्याप्त होना चाहिए

सामान्य तौर पर, यदि प्रारंभकर्ता ताज़ा प्रारंभिक सूची नहीं है, तो कंपाइलर प्रक्रियाओं को इस तरह से चलाया जाता है:

  1. यह एक कृत्रिम फ़ंक्शन टेम्पलेट घोषणापत्र तैयार करता है, जिसके साथ घोषणाकर्ता के सटीक रूप के एक तर्क के साथ, auto टेम्पलेट पैरामीटर द्वारा प्रतिस्थापित किया जाता है। तो auto* x = ... , यह उपयोग करता है

     template <class T> void foo(T*); 
  2. यह कॉल foo(initializer) को हल करने का प्रयास करता है, और यह दिखता है कि T लिए क्या अनुमान लगाया जाता है। इसे auto स्थान पर वापस प्रतिस्थापित किया जाता है

  3. यदि एक घोषणा में अधिक घोषणाकार हैं, तो यह सभी के लिए किया जाता है अनुमानित T उन सभी के लिए समान होना चाहिए …

 auto newvar1 = *myvector; 

संभव है कि आप क्या चाहते हैं, जो वास्तविक वेक्टर की प्रतिलिपि बनाता है। यदि आप एक संदर्भ के बजाय auto& newvar1 = *myvector; या एक ही सदिश का उपयोग auto newvar1 = myvector; एक और पॉइंटर बनाने के लिए auto newvar1 = myvector; । आपके दूसरे प्रयास auto *newvar1 = myvector; यह है कि उत्तरार्द्ध बारवेक्टर को सूचक प्रकार के रूप में बन्द करता है, इसलिए निम्न कोड विफल हो जाता है:

 std::vector<int> v1; auto* v2 = v1; // error: unable to deduce 'auto*' from 'v1'