2012-09-15 12 views
5

साथ अधिक भार मैं वास्तव में एक समारोह के इस तरह अधिक भार का उपयोग कर सकते हैं? और मुझे किस तरह की स्थितियों में :: foo (...) मिलेगा?समारोह अंडाकार

void foo (...) 

इसका मतलब यह foo तर्क के किसी भी संख्या स्वीकार करता है:

+1

परिवर्तनीय तर्क। –

उत्तर

0

जब आप निम्नलिखित तरीके से एक समारोह की घोषणा।

तो यह फ़ंक्शन कॉल किया जाएगा जब यह उपयुक्त होना चाहिए।

अपने मामले जब भी आप नहीं लिखेंगे में:

foo(//Some single int). 

अपने विशिष्ट मुख्य में, यह क्या होगा:

foo(0)  //Calls foo(int). 
foo('A) //Calls foo (int). as you can convert a char to an int. 
foo("str") //Calls foo(...) . as you can not convert a string to an int. 
foo(1,2) //Calls foo(...) . as this is the only possible function 
      cause the second foo function only takes one int. 
0

void foo(...) चर तर्क ले जाएगा। और यह तब कहा जाएगा जब कोई भी प्रकार या तर्क उसी फ़ंक्शन नाम के साथ अन्य फ़ंक्शन की प्रदत्त तर्क सूची से मेल नहीं खाता है।

foo(0);    //This will call void foo(int) function 
foo('A');   //This will call void foo(int) function 
foo("str");   //This will call void foo(...) function 
foo(0, 1);   //This will call void foo(...) function 

नोट:

हालांकि अंडाकार समारोह से अधिक भार के साथ ठीक काम करता है, यह अत्यधिक variadic कार्यों को आगे बढ़ाने की सिफारिश नहीं है। कम से कम तब तक जब तक आपको संकटों को समझने के लिए सी ++ में काफी अधिक अनुभव नहीं होता है। मैं केवल कोशिश पकड़ने के ब्लॉक के साथ इसका उपयोग सुझाऊंगा जहां ऐसी स्थितियां हैं जब त्रुटि की भविष्यवाणी नहीं की जा सकती है।

2
void foo(int) 

int प्रकार के एक तर्क को स्वीकार करेगा।

void foo(...) 

किसी भी प्रकार के तर्कों को स्वीकार करता है। यह तब चुना जाएगा जब कॉल में int तर्क नहीं होगा। सामान्य रूप से बहुत उपयोगी नहीं है।

यह भी ध्यान रखें कि कक्षा प्रकार की वस्तुओं को ... पर पास करने के लिए यह अनिर्धारित व्यवहार है।

+0

गैर-पीओडी कक्षा के प्रकार, जो है। (सी ++ 11 इस आवश्यकता को तुच्छता के संदर्भ में व्यक्त करता है और सशर्त रूप से समर्थित कार्यान्वयन परिभाषित व्यवहार के लिए यूबी को बदलता है।) –

+0

* सशर्त रूप से समर्थित कार्यान्वयन परिभाषित व्यवहार * मुझे और भी बदतर लगता है।:-) बहुत कुछ लगता है * ऐसा मत करो! *। –

2

N3337 में मैं देख सकते हैं: -

13.3.2 व्यवहार्य कार्यों
एक उम्मीदवार समारोह मीटर मानकों की तुलना में कम होने व्यवहार्य है केवल अगर यह अपनी पैरामीटर सूची (8.3 में एक अंडाकार है। 5)। अधिभार संकल्प के प्रयोजनों के लिए, कोई भी तर्क जिसके लिए कोई पैरामीटर"इलिप्सिस से मेल खाता है" (13.3.3.1.3) माना जाता है।

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