खोज…


परिचय

यह विषय उस टाइपिंग के बारे में चर्चा करता है जिसमें कीवर्ड auto प्रकार शामिल है जो C ++ 11 से उपलब्ध है।

टिप्पणियों

यह आमतौर पर घोषित करने के लिए बेहतर है const , & और constexpr जब भी आप का उपयोग auto अगर यह कभी इस तरह की प्रतिलिपि बनाने या म्यूटेशन के रूप में अवांछित व्यवहार को रोकने के लिए आवश्यक है। उन अतिरिक्त संकेतों से यह सुनिश्चित होता है कि संकलक किसी भी अन्य प्रकार के अनुमान उत्पन्न नहीं करता है। यह auto उपयोग करने के लिए भी अदृश्य नहीं है और इसका उपयोग केवल तब किया जाना चाहिए जब वास्तविक घोषणा बहुत लंबी हो, खासकर एसटीएल टेम्पलेट्स के साथ।

डेटा प्रकार: ऑटो

यह उदाहरण दिखाता है कि मूल प्रकार के संकलक कंपाइलर प्रदर्शन कर सकते हैं।

auto a = 1;        //    a = int
auto b = 2u;       //    b = unsigned int
auto c = &a;       //    c = int*
const auto  d = c; //    d = const int*
const auto& e = b; //    e = const unsigned int& 

auto x = a + b     //    x = int, #compiler warning unsigned and signed

auto v = std::vector<int>;    //    v = std::vector<int>

हालांकि, ऑटो कीवर्ड हमेशा के लिए अतिरिक्त संकेत के बिना की उम्मीद प्रकार निष्कर्ष प्रदर्शन नहीं करता & या const या constexpr

//    y = unsigned int, 
//    note that y does not infer as const unsigned int&
//    The compiler would have generated a copy instead of a reference value to e or b
auto y = e;    

लैंबडा ऑटो

डेटा प्रकार ऑटो कीवर्ड प्रोग्रामरों के लिए लंबो कार्यों को घोषित करने का एक सुविधाजनक तरीका है। यह फ़ंक्शन प्रोग्रामर की मात्रा को छोटा करके फ़ंक्शन पॉइंटर घोषित करने के लिए टाइप करने में मदद करता है।

auto DoThis = [](int a, int b) { return a + b; };
//    Do this is of type (int)(*DoThis)(int, int)
//    else we would have to write this long
int(*pDoThis)(int, int)= [](int a, int b) { return a + b; };

auto c = Dothis(1, 2);    //    c = int
auto d = pDothis(1, 2);   //    d = int

//    using 'auto' shortens the definition for lambda functions

डिफ़ॉल्ट रूप से, यदि लैम्बडा फ़ंक्शन के रिटर्न प्रकार को परिभाषित नहीं किया गया है, तो यह स्वचालित रूप से रिटर्न एक्सप्रेशन प्रकारों से अनुमान लगाया जाएगा।

ये 3 मूल रूप से एक ही बात है

[](int a, int b) -> int  { return a + b; };
[](int a, int b) -> auto { return a + b; };
[](int a, int b) { return a + b; };

लूप और ऑटो

यह उदाहरण दिखाता है कि ऑटो को छोरों के लिए प्रकार की घोषणा को छोटा करने के लिए कैसे इस्तेमाल किया जा सकता है

std::map<int, std::string> Map;
for (auto pair : Map)            //    pair = std::pair<int, std::string>
for (const auto pair : Map)      //    pair = const std::pair<int, std::string>    
for (const auto& pair : Map)     //    pair = const std::pair<int, std::string>&
for (auto i = 0; i < 1000; ++i)        //    i = int
for (auto i = 0; i < Map.size(); ++i)  //    Note that i = int and not size_t
for (auto i = Map.size(); i > 0; --i)  //    i = size_t


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow