मैंने सोचा था कि संदर्भ केवल संदर्भ के ही जीवन भर के लिए temporaries के जीवन का विस्तार, लेकिन यह स्निपेट के उत्पादन में विरोधाभासी लगता है:एक संदर्भ पैरामीटर के लिए अस्थायी डिफ़ॉल्ट तर्क का जीवनकाल क्या है?
#include <iostream>
struct X{ ~X(){ std::cout << "Goodbye, cruel world!\n"; } };
X const& f(X const& x = X()){
std::cout << "Inside f()\n";
return x;
}
void g(X const& x){
std::cout << "Inside g()\n";
}
int main(){
g(f());
}
Live example. आउटपुट:
Inside f()
Inside g()
Goodbye, cruel world!
तो ऐसा लगता है g()
के बाद अस्थायी नष्ट हो गया है ... क्या देता है?
यह सामान्य रूप से अमित्र माना जाता है जब downvoting एक व्याख्या नहीं छोड़ देता है। – Xeo
मेरा अनुमान है कि डाउनवॉटर गलती से डाउनवोट बटन दबाता है जब वे वास्तव में अपवॉट बटन को मारने के लिए चाहते थे (आपके उत्तर के लिए कुल वोट देखकर और प्रश्न इस सिद्धांत का भी समर्थन करता है)। किंतु कौन जानता है! –
@ जेसे: अच्छा सिद्धांत, लेकिन डाउनवोट आने से पहले प्रश्न के मुकाबले उत्तर में अधिक उछाल आया था। :) – Xeo