मैं हाल ही में निम्न स्थिति भर में भाग गया:मूल्यांकन आदेश
#include <iostream>
int *p = 0;
int f() {
p = new int(10);
return 0;
}
void g(int x, int *y = p) {
std::cout << y << std::endl;
}
int main() {
g(f());
}
यह काफी सूक्ष्म है के बाद से आप आमतौर पर डिफ़ॉल्ट तर्क समारोह कॉल के लिए उनके मूल्यांकन के दौरान बदल की उम्मीद नहीं करते । मुझे इस त्रुटि को देखने के लिए असेंबली को देखना पड़ा।
अब मेरा प्रश्न है: क्या यह वास्तव में अपरिभाषित व्यवहार है, क्योंकि फ़ंक्शन तर्कों के मूल्यांकन आदेश से संबंधित कोई गारंटी नहीं है?
"कॉलर के संदर्भ में डिफ़ॉल्ट तर्कों का मूल्यांकन होता है" क्या आपके पास इस दावे के लिए वर्तमान सी ++ मानक में कोई संदर्भ है? – phlipsy
1.9p11 में एक गैर-मानक नोट है जो स्पष्ट रूप से कहता है। इसके अलावा, मुझे लगता है कि यह केवल अन्य तर्कों से भेदभाव की कमी से निहित है। –
@phlipsy देखें [dcl.fct.default]/9 "प्रत्येक बार फ़ंक्शन कहलाए जाने पर डिफ़ॉल्ट तर्कों का मूल्यांकन किया जाता है। फ़ंक्शन तर्कों का मूल्यांकन अनिश्चित है।", मुझे लगता है कि यह स्पष्ट रूप से इंगित करता है कि 'g (f()) '' जी (एफ(), पी) के समान है –