एक संदर्भ मैं निम्नलिखित कोड दुखी विफल उम्मीद करेंगे पकड़े एक वर्ग बीत रहा है, लेकिन यह संकलित:क्लास एक संदर्भ प्रतिलिपि रखने वाला वर्ग क्यों है?
#include <iostream>
struct ReferenceHolder
{
std::string& str;
ReferenceHolder(std::string& str)
: str(str)
{}
};
// Why does this compile?
ReferenceHolder f() {
std::string str = "Hello";
return ReferenceHolder(str);
}
int main() {
ReferenceHolder h = f();
std::cout << "Should be garbage: " << h.str << '\n';
return 0;
}
संकलक: जी ++ 4.7.2 (-std साथ = C++ 11)
संपादित करें: यहां तक कि -फनो-एलिइड-कन्स्ट्रक्टर के साथ यह खुशी से संकलित करता है
स्पष्ट रूप से इसे स्थानांतरित किया जा रहा है। यदि आप स्पष्ट रूप से चालक कन्स्ट्रक्टर को हटाते हैं तो यह संकलित नहीं होता है। – jrok
@jrok True, लेकिन जहां तक मैं देख सकता हूं कि यह कॉपी करने योग्य और जंगम दोनों है। – dyp
दिलचस्प बात यह है कि मिल सीपीयू (सुरक्षा वार्ता) की प्रस्तुति के अनुसार, इस वास्तुकला पर आपको एक सेगमेंटेशन गलती मिल जाएगी। –