2013-08-08 8 views
13

क्या C12+ में auto कीवर्ड फ़ंक्शन टेम्पलेट्स और विशेषज्ञता को प्रतिस्थापित कर सकता है? यदि हां, तो auto के रूप में फ़ंक्शन पैरामीटर टाइप करने पर टेम्पलेट फ़ंक्शंस और विशेषज्ञता का उपयोग करने के क्या फायदे हैं। यदि नहीं, तो मैं पूरी तरह से नरक में उतरने की उम्मीद करता हूं, लेकिन मैं सी ++ में नया हूं लेकिन इसलिए कृपया मुझ पर आसान रहें।फ़ंक्शन टेम्पलेट बनाम ऑटो कीवर्ड

template <typename T> 
void myFunction(T &arg) 
{ 
    // ~ 
} 

बनाम

void myFunction(auto &arg) 
{ 
    // ~ 
} 
+4

आप कुछ जानने के लिए नीचे नहीं आते हैं (कम से कम यह उस तरह से होना चाहिए, और यह बड़े पैमाने पर काम करता है)। हालांकि आप अनुसंधान करने के लिए गंदे दिखने की उम्मीद कर सकते हैं। क्या आपने उन स्निपेट को संकलित करने का प्रयास किया था, क्या आपने यहां 'ऑटो' के बारे में मौजूदा प्रश्नों में से एक देखा है? – delnan

+3

सी ++ 14 में एक तरीका है: 'ऑटो myFunction = [] (ऑटो और तर्क) {...}; ' – chris

उत्तर

8

संक्षेप में, auto समारोह तर्क की वास्तविक प्रकार को छोड़ देते हैं, तो समारोह टेम्पलेट्स और/या भार के साथ छड़ी करने के प्रयास में नहीं किया जा सकता। auto कानूनी तौर पर स्वचालित रूप से चर के प्रकार के अनुमान किया जाता है:

auto i=5; 

बहुत निम्नलिखित के बीच अंतर को समझने के लिए सावधान रहें, हालांकि:

auto x=... 
auto &x=... 
const auto &x=... 
auto *px=...; // vs auto px=... (They are equivalent assuming what is being 
       //     assigned can be deduced to an actual pointer.) 
// etc... 

यह भी प्रत्यय वापसी प्रकार के लिए प्रयोग किया जाता है:

template <typename T, typename U> 
auto sum(const T &t, const U &u) -> decltype(t+u) 
{ 
    return t+u; 
} 
+0

यह कहना महत्वपूर्ण है कि ऑटो ठीक है और 99% समय अच्छा है, कभी-कभी आपको रोकना होगा एक सेकंड के लिए और वास्तव में ऑटो क्या कर रहा है इसके बारे में सोचें http://stackoverflow.com/questions/12773257/does-auto-type-assignments-of-a-pointer-in-c11-require पॉइंटर्स ऑटो के लिए एक कोने केस हो सकता है । – user2485710

+0

@ user2485710, आपकी टिप्पणी के आधार पर मेरे उत्तर में अधिक जानकारी दी। –

6

auto सी ++ 11 में कीवर्ड फ़ंक्शन टेम्पलेट्स को प्रतिस्थापित कर सकता है और विशेषज्ञताओं?

नहीं। इस उद्देश्य के लिए कीवर्ड का उपयोग करने के प्रस्तावों रहे हैं, लेकिन यह सी ++ 11 में नहीं है, और मुझे लगता है कि सी ++ 14 केवल बहुरूपी lambdas के लिए यह अनुमति देगा, ढंग से काम टेम्पलेट्स नहीं।

यदि हां, तो auto के रूप में फ़ंक्शन पैरामीटर टाइप करने पर टेम्पलेट फ़ंक्शंस और विशेषज्ञता का उपयोग करने के क्या फायदे हैं।

यदि आप प्रकार को संदर्भित करना चाहते हैं तो भी आप एक नामित टेम्पलेट पैरामीटर चाहते हैं; यह std::remove_reference<decltype(arg)>::type या जो भी हो उससे अधिक सुविधाजनक होगा।

संबंधित मुद्दे