2015-07-30 11 views
7

यह this question पर एक फॉलो-अप है। ओपी प्रश्न में कोड मेरे लिए काफी उचित और स्पष्ट दिखता था। , इसके अलावाक्यों सी ++ डिफ़ॉल्ट मानों के बाद के मानकों के लिए उपयोग किए गए फ़ंक्शन पैरामीटर की अनुमति नहीं देता है?

int foo(int a, int b = a); 

, कम से कम सी ++ 11 में घोषित मापदंडों के प्रकार वापसी प्रकार निर्धारित करने के लिए इस्तेमाल किया जा सकता है ताकि: क्यों नहीं सी ++ पूर्व मानकों का प्रयोग करके, बाद मानकों के मूलभूत मूल्यों को परिभाषित करने के कुछ इस तरह की अनुमति नहीं इस प्रकार प्रश्न

auto bar(int a) -> decltype(a); 

: (के) कारण क्यों foo के ऊपर घोषणा की अनुमति नहीं है क्या कर रहे हैं यह नहीं अनसुना की समान तरीके से समारोह पैरामीटर का उपयोग करने के लिए?

+4

एक कारण यह है कि मैं के बारे में सोच सकते हैं कि समझदार इस समारोह तर्क मूल्यांकन आदेश पर एक बाधा है, जो वर्तमान में अपरिभाषित है की आवश्यकता होगी हो रहा है सी ++। रिटर्न-टाइप उदाहरण के लिए यह आवश्यक नहीं है। – MooseBoys

+0

सुविधा के अलावा, यदि आप ऐसी स्थिति जोड़ सकते हैं जहां यह अन्य प्रश्नों के उत्तर के रूप में ओवरलोड के माध्यम से प्राप्त नहीं किया जा सकता है, तो यह * आवश्यकता * के महत्वपूर्ण ईंधन को जोड़ देगा। * आवश्यकता * या पिछड़े संगतता के बिना, मानक समिति फीचर एडिशन में कुछ हद तक रूढ़िवादी है। वे "क्यों नहीं?" से स्पष्ट हो जाते हैं अधिक कड़े "क्यों" के पक्ष में। – WhozCraig

+0

एक साइड नोट के रूप में: सी ++ ('__cdecl' और' __stdcall') में उपयोग किए जाने वाले दो सबसे लोकप्रिय कॉलिंग सम्मेलन [दाएं से बाएं ऑर्डर को परिभाषित करें] (https://msdn.microsoft.com/en-us/library/984x0h58 .aspx) तर्क गुजरने के। यदि आप फ़ंक्शन तर्क के रूप में कुछ गैर-परीक्षण (कस्टम कन्स्ट्रक्टर युक्त) पैरामीटर के साथ कोड डीबग करते हैं और इस तरह के कॉल में कदम उठाते हैं, तो आप देखेंगे कि रचनाकार * वास्तव में * रिवर्स ऑर्डर में कॉल किए जा रहे हैं। –

उत्तर

7

एक बात के लिए, a की समीक्षा b से पहले की जाती है, लेकिन सी ++ (जैसे सी) फ़ंक्शन पैरामीटर के मूल्यांकन के क्रम को परिभाषित नहीं करता है।

तुम अब भी एक अधिभार जोड़कर प्रभाव आप चाहते हैं प्राप्त कर सकते हैं:

int foo(int a, int b) 
{ /* do something */ } 

int foo(int a) 
{ return foo(a, a); } 
+1

मुझे नहीं लगता कि यह कैसे प्रासंगिक है कि सी ++ मूल्यांकन आदेश निर्दिष्ट नहीं करता है। बाद में डिफ़ॉल्ट मानों में उपयोग किए जाने वाले पैरामीटर को आवंटित करने के लिए निश्चित रूप से कुछ आंशिक क्रम लागू किया जाएगा जब इस सुविधा का उपयोग किया जाता है। लेकिन मुझे नहीं लगता कि यह एक समस्या होगी। मुझे लगता है कि इसका कारण यह नहीं है कि लाभ बहुत छोटा होगा। –

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

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