क्या किसी ने कभी भी स्टोरेज क्लास ऑटो को स्पष्ट रूप से सी/सी ++ में उपयोग में देखा है? यदि हां, तो किस स्थिति में?ऑटो सी/सी ++
उत्तर
ऑटो वर्तमान सी/सी ++ में कभी भी उपयोगी नहीं है क्योंकि सभी चर अंतर्निहित ऑटो हैं। यह सी ++ 0x में उपयोगी है, जहां यह पूरी तरह से घोषणा घोषणा को प्रतिस्थापित कर सकता है - यदि आपके पास प्रारंभिक असाइनमेंट वाला चर है, तो 'ऑटो' केवल टिप्पणियों के अनुसार उस असाइनमेंट मान का प्रकार बना देगा।
नहीं, यह माना जाता है कि क्या आप कक्षा विनिर्देशक को छोड़ देते हैं। एकमात्र उचित उपयोग मैं सोच सकता हूं कि एक विशेष स्थानीय चर पर ध्यान देना होगा, जो एक ही नाम के साथ एक वैश्विक चर, ओवरराइड, या एक साक्षात्कार प्रश्न के रूप में ओवरराइड करता है।
संभावना है, आप खराब प्रोग्रामर को भ्रमित करेंगे जो कोड को बनाए रखने में फंस गया है!
मैंने पिछले 10+ वर्षों में लिखे गए कोड में auto
नहीं देखा है। auto
का उपयोग करने का कोई कारण नहीं है क्योंकि आप केवल कर सकते हैं, जहां इसका उपयोग किया जाता है, वैसे भी इसका उपयोग किया जाता है। एकमात्र कारण यह अभी भी मौजूद है, पीछे की संगतता के लिए है लेकिन इसे नए कोड में टालना चाहिए।
एलेक्स के रूप में कवर किया है के लिए अच्छा है, ऑटो initialisation घोषणाओं में प्रकार जहां प्रकार initialisation कोड से अनुमान लगाया गया है की घोषणा करने के C++ 0x में प्रयोग किया जाता है।
इसके लिए एक रिटर्न प्रकार के रूप में उपयोग करने का प्रस्ताव भी था, जहां एक मूल्य लौटने वाले कोड से टाइप किया जाता है। हालांकि इसने एक अस्पष्टता को जन्म दिया, इसलिए लेखन के समय, सी ++ 0x के लैम्ब्डा वाक्यविन्यास के साथ कुछ और संगत माना जा रहा है।
जीसीसी में आप आदेश समारोह शरीर में कहीं भी यह परिभाषित करने में सक्षम होने के लिए नेस्टेड समारोह की घोषणा करने के ऑटो आवश्यकता हो सकती है - देखना http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Nested-Functions.html
उस पृष्ठ के शीर्ष पर दाईं ओर यह कहता है कि नेस्टेड फ़ंक्शन जीएनयू सी ++ के लिए समर्थित नहीं हैं। तो क्या नेस्टेड फ़ंक्शंस के संबंध में ऑटो सामान C++ के अन्य कार्यान्वयन पर लागू होता है? – c0m4
@ c0m4: यह मानना सुरक्षित होगा कि नेस्टेड फ़ंक्शंस जैसे जीएनयू सी एक्सटेंशन अन्य कंपाइलर्स के साथ उपलब्ध नहीं हैं। –
यहाँ मेरी कोड, में लिखा से एक उदाहरण सी ++ 11 है:
c_srgb find_in_book(const c_HVC &HVC) {
auto b = munsell.mun_to_rgb_book.find(HVC);
if(b != munsell.mun_to_rgb_book.end()) {
c_srgb f = b->second;
return f;
} else {
c_srgb ret;
ret.r=ret.g=ret.b=0;
return ret;
}
}
मैं पसंद है कि इस के लिए:
c_srgb find_in_book(const c_HVC &HVC) {
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<dj::color::c_HVC,dj::color::c_srgb,std::less<dj::color::c_HVC>,std::allocator<std::pair<const dj::color::c_HVC,dj::color::c_srgb>>,false>>> b = munsell.mun_to_rgb_book.find(HVC);
if(b != munsell.mun_to_rgb_book.end()) {
c_srgb f = b->second;
return f;
} else {
c_srgb ret;
ret.r=ret.g=ret.b=0;
return ret;
}
}
आप शामिल किया जा सका C++ 0x का एक उदाहरण का उपयोग करें? – c0m4
ऑटो funcptr = std :: tr1 :: बाइंड (और Foo :: बार, यह, _1, _2); यह "funcptr" को "बाइंड" रिटर्न के समान प्रकार के रूप में घोषित करता है (जो एक गंभीर रूप से जटिल प्रकार है; पुराने दिनों में, आप इसे std :: tr1 :: फ़ंक्शन टेम्पलेट में लपेटेंगे, लेकिन ऑटो के साथ आप डॉन करेंगे अब और करने की जरूरत नहीं है)। –
क्या यह एक विशेष मामला है या यह सामान्य रूप से अधिक काम करता है, जैसे ऑटो someVar = functionThatReturns अज्ञात टाइप(); ? – c0m4