चर के लिए, निर्दिष्ट करता है कि जिस प्रकार का चर घोषित किया जा रहा है, वह अपने इनिशियलाइज़र से स्वचालित रूप से कट जाएगा। फ़ंक्शंस के लिए, निर्दिष्ट करता है कि रिटर्न प्रकार एक अनुगामी रिटर्न प्रकार है या इसके रिटर्न स्टेटमेंट (C ++ 14 के बाद से) से काट लिया जाएगा।
वाक्य - विन्यास
auto variable initializer (1) (since C++11)
auto function -> return type (2) (since C++11)
auto function (3) (since C++14)
decltype(auto) variable initializer (4) (since C++14)
decltype(auto) function (5) (since C++14)
auto :: (6) (concepts TS)
cv(optional) auto ref(optional) parameter (7) (since C++14)
व्याख्या
1) ब्लॉक स्कोप में वेरिएबल्स की घोषणा करते समय, नेमस्पेस स्कोप में, लूप्स के लिए इनिशियलाइज़ेशन स्टेटमेंट में, आदि, कीवर्ड ऑटो को टाइप स्पेसियर के रूप में इस्तेमाल किया जा सकता है। एक बार जब इनिशलाइज़र का प्रकार निर्धारित किया गया है, तो कंपाइलर उस प्रकार को निर्धारित करता है जो एक फ़ंक्शन कॉल से टेम्पलेट तर्क कटौती के नियमों का उपयोग करके कीवर्ड ऑटो को बदल देगा (टेम्पलेट तर्क कटौती # विवरण के लिए अन्य संदर्भ) देखें। कीवर्ड ऑटो मॉडिफ़ाइड के साथ हो सकता है, जैसे कि कॉन्स्ट या; जो कि प्रकार की कटौती में भाग लेंगे। उदाहरण के लिए, दिया गया const auto& i = expr;
, i का प्रकार एक काल्पनिक टेम्पलेट में तर्क यू का प्रकार हैtemplate<class U> void f(const U& u)
में फ़ंक्शन कॉल करता हैf(expr)
संकलित किया गया था। इसलिए, ऑटो और& को या तो एक लैवल्यू रेफ़रेंस के रूप में या रैवल्यू रेफ़रेंस के अनुसार घटाया जा सकता है, जिसका उपयोग लूप के लिए रेंज-बेस्ड में किया जाता है। यदि ऑटो का उपयोग कई चर घोषित करने के लिए किया जाता है, तो कटौती प्रकार मेल खाना चाहिए। उदाहरण के लिए, घोषणा auto i = 0, d = 0.0;
बीमार है, जबकि घोषणा auto i = 0, *p = &i;
अच्छी तरह से बनाई गई है और ऑटो को int के रूप में घटाया गया है।
2) एक फ़ंक्शन घोषणा में जो ट्रेलिंग रिटर्न प्रकार सिंटैक्स का उपयोग करता है, कीवर्ड ऑटो स्वचालित प्रकार का पता लगाने का प्रदर्शन नहीं करता है। यह केवल वाक्य रचना के एक भाग के रूप में कार्य करता है।
3) एक फ़ंक्शन घोषणा में जो अनुगामी रिटर्न प्रकार सिंटैक्स का उपयोग नहीं करता है, कीवर्ड ऑटो इंगित करता है कि वापसी प्रकार टेम्पलेट तर्क कटौती के लिए नियमों का उपयोग करके अपने रिटर्न स्टेटमेंट के ऑपरेंड से काट लिया जाएगा।
4) यदि घोषित प्रकार का वैरिएबल (ऑटो) डिक्लेयर है, तो कीवर्ड ऑटो को उसके इनिशियलाइज़र के एक्सप्रेशन (या एक्सप्रेशन लिस्ट) से बदल दिया जाता है, और वास्तविक प्रकार डिक्लेपट के नियमों का उपयोग करके घटाया जाता है।
5) यदि फ़ंक्शन का रिटर्न प्रकार घोषित किया जाता है, तो ऑटो (कीवर्ड) को उसके रिटर्न स्टेटमेंट के ऑपरेंड के साथ बदल दिया जाता है, और वास्तविक रिटर्न प्रकार को डिस्क्रिप्टी के नियमों का उपयोग करके घटा दिया जाता है।
6) फॉर्म ऑटो का नेस्टेड-नेम-स्पेसिफ़ायर :: एक प्लेसहोल्डर है जिसे विवश टाइप प्लेसहोल्डर कटौती के नियमों के अनुसार एक वर्ग या गणना प्रकार द्वारा प्रतिस्थापित किया जाता है।
7) एक लंबोदर अभिव्यक्ति में एक पैरामीटर घोषणा। (C ++ 14 के बाद से) एक फ़ंक्शन पैरामीटर घोषणा। (अवधारणा टीएस)
नोट्स
सी ++ 11 तक, ऑटो एक भंडारण अवधि विनिर्देशक का अर्थ था। ऑटो वैरिएबल और फ़ंक्शंस को एक घोषणा में मिलाना, जैसा auto f() -> int, i = 0;
कि अनुमति नहीं है।
अधिक जानकारी के लिए: http://en.cppreference.com/w/cpp/language/auto