में "आईडी" फ़ंक्शन this फ़ंक्शन से रैल्यू संदर्भों को वापस करने के संबंध में उत्तर मुझे सोचने लगा, मैंफ़ंक्शन C++ 0x में कैसे लिख सकता हूं।सी ++ 0x
असल में, मैं id
चाहता हूं कि ऐसा कुछ भी न हो, एक ऐसा फ़ंक्शन जिसका प्रोग्राम पर कोई प्रभावशाली प्रभाव न हो।
#include <iostream>
class X
{
public:
X(std::string&& s) : s(std::move(s)) {};
X(const std::string& s) : s(s) {};
std::string s;
~X() { std::cout << "Destroying: " << s << std::endl; }
private:
X(const X&) {};
X(X&&) {};
};
template <class T>
T&& id(T&& x) { return static_cast<T&&>(x); }
int main()
{
auto&& x1 = X("x1");
std::cout << "Line 1" << std::endl;
auto&& x2 = id(X("x2"));
std::cout << "Line 2" << std::endl;
}
हालांकि, मुझे डर है कि इस मामले में, x2, एक झूलने संदर्भ के रूप में X("x2")
नष्ट हो जाता है इससे पहले कि "लाइन 2" निष्पादित करता है:
मेरा पहला प्रयास के बाद है।
तो यहां, स्पष्ट रूप से id
का एक प्रभावशाली प्रभाव है।
मैं सी ++ 0x में id
फ़ंक्शन कैसे लिख सकता हूं, जो विशेष रूप से बिना किसी चाल/प्रति रचनाकारों के प्रकारों के लिए काम करता है।
समस्या यह है कि एक फ़ंक्शन घोषणा यह नहीं बताती है कि लौटा संदर्भ अभी भी उसी ऑब्जेक्ट को संदर्भित करता है जो इसे पास कर दिया गया है। और यह निर्धारित करने के लिए कि यह वास्तव में क्या लौटाता है और अस्थायी जीवन का समय इस विश्लेषण पर निर्भर करता है, यह निर्धारित करने के लिए फ़ंक्शंस के कार्यान्वयन की जांच करने के लिए कंपाइलर्स को मजबूर करना उचित नहीं है। – sellibitze