auto
(संदर्भ में, जहां यह एक प्रकार infers में) एक चर जिसके लिए वहाँ एक प्रारंभकर्ता है के प्रकार को परिभाषित करने तक सीमित है। decltype
एक व्यापक निर्माण कि, जो अतिरिक्त जानकारी की कीमत पर, एक अभिव्यक्ति के प्रकार का अनुमान लगा होगा।
उन मामलों में जहां auto
का उपयोग किया जा सकता है, यह decltype
से अधिक संक्षिप्त है, क्योंकि आपको अभिव्यक्ति प्रदान करने की आवश्यकता नहीं है, जिससे किस प्रकार से अनुमान लगाया जाएगा।
auto x = foo(); // more concise than `decltype(foo()) x`
std::vector<decltype(foo())> v{ foo() }; // cannot use `auto`
कीवर्ड auto
भी पूरी तरह से असंबद्ध संदर्भ में प्रयोग किया जाता है, जब कार्यों के लिए बदले प्रकार अनुगामी का उपयोग कर:
auto foo() -> int;
वहाँ auto
केवल एक नेता ताकि संकलक जानता है कि यह एक घोषणा है एक पीछे वापसी प्रकार के साथ। ऊपर के उदाहरण तुच्छता से पुरानी शैली में बदला जा सकता है, सामान्य प्रोग्रामिंग में यह उपयोगी है:
template <typename T, typename U>
auto sum(T t, U u) -> decltype(t+u)
ध्यान दें कि इस मामले में, auto
वापसी प्रकार परिभाषित करने के लिए इस्तेमाल नहीं किया जा सकता है।
स्रोत
2012-08-23 02:55:18
@JesseGood प्रश्न पूछने से पहले, मैंने उस धागे को पढ़ा और एक क्लीनर स्पष्टीकरण की तलाश में हूं –
इसी तरह के प्रश्न: [1]: http://stackoverflow.com/questions/11459928/equivalence-between-decltype-and- ऑटो [2]: http://stackoverflow.com/questions/6869888/the-relationship-between-auto-and-decltype – crnlx
@JamesLeonard: ठीक है, अच्छी तरह से मैं स्कॉट द्वारा एक से एक बेहतर स्पष्टीकरण [पता नहीं है मेयर्स] (http: // सीपीपी-अगले।com/संग्रह/2011/04/प्रदर्शित होने और गायब-consts-इन-सी /)। –