यह this question पर एक फॉलो-अप है। ओपी प्रश्न में कोड मेरे लिए काफी उचित और स्पष्ट दिखता था। , इसके अलावाक्यों सी ++ डिफ़ॉल्ट मानों के बाद के मानकों के लिए उपयोग किए गए फ़ंक्शन पैरामीटर की अनुमति नहीं देता है?
int foo(int a, int b = a);
, कम से कम सी ++ 11 में घोषित मापदंडों के प्रकार वापसी प्रकार निर्धारित करने के लिए इस्तेमाल किया जा सकता है ताकि: क्यों नहीं सी ++ पूर्व मानकों का प्रयोग करके, बाद मानकों के मूलभूत मूल्यों को परिभाषित करने के कुछ इस तरह की अनुमति नहीं इस प्रकार प्रश्न
auto bar(int a) -> decltype(a);
: (के) कारण क्यों foo
के ऊपर घोषणा की अनुमति नहीं है क्या कर रहे हैं यह नहीं अनसुना की समान तरीके से समारोह पैरामीटर का उपयोग करने के लिए?
एक कारण यह है कि मैं के बारे में सोच सकते हैं कि समझदार इस समारोह तर्क मूल्यांकन आदेश पर एक बाधा है, जो वर्तमान में अपरिभाषित है की आवश्यकता होगी हो रहा है सी ++। रिटर्न-टाइप उदाहरण के लिए यह आवश्यक नहीं है। – MooseBoys
सुविधा के अलावा, यदि आप ऐसी स्थिति जोड़ सकते हैं जहां यह अन्य प्रश्नों के उत्तर के रूप में ओवरलोड के माध्यम से प्राप्त नहीं किया जा सकता है, तो यह * आवश्यकता * के महत्वपूर्ण ईंधन को जोड़ देगा। * आवश्यकता * या पिछड़े संगतता के बिना, मानक समिति फीचर एडिशन में कुछ हद तक रूढ़िवादी है। वे "क्यों नहीं?" से स्पष्ट हो जाते हैं अधिक कड़े "क्यों" के पक्ष में। – WhozCraig
एक साइड नोट के रूप में: सी ++ ('__cdecl' और' __stdcall') में उपयोग किए जाने वाले दो सबसे लोकप्रिय कॉलिंग सम्मेलन [दाएं से बाएं ऑर्डर को परिभाषित करें] (https://msdn.microsoft.com/en-us/library/984x0h58 .aspx) तर्क गुजरने के। यदि आप फ़ंक्शन तर्क के रूप में कुछ गैर-परीक्षण (कस्टम कन्स्ट्रक्टर युक्त) पैरामीटर के साथ कोड डीबग करते हैं और इस तरह के कॉल में कदम उठाते हैं, तो आप देखेंगे कि रचनाकार * वास्तव में * रिवर्स ऑर्डर में कॉल किए जा रहे हैं। –