ले जाने cppreferenceअपरिभाषित व्यवहार ::
जब तक अन्यथा उल्लिखित की move page से, सभी मानक पुस्तकालय वस्तुओं है से एक वैध लेकिन अनिर्दिष्ट राज्य में रखा जाता है स्थानांतरित कर दिया गया। यही कारण है, इस तरह का असाइनमेंट ऑपरेटर के रूप में पूर्व शर्त के बिना ही काम करता है, सुरक्षित रूप से एक ही पृष्ठ पर, वस्तु पर इस्तेमाल किया जा सकता के बाद यह
तो से ले जाया गया था उदाहरण से, नीचे इस कोड को माना जाता है अपरिभाषित व्यवहार
vector<string> v_string;
string example = "example";
v_string.push_back(move(example));
cout << example << endl;
MSVC जाएगा कंसोल पर उत्पादन कुछ भी नहीं है, लेकिन अगर मैं इस
vector<int> v_int;
int number = 10;
v_int.push_back(move(number));
cout << number << endl;
इच्छा उत्पादन कर 10 एक कारण क है y ऐसा होता है? या यह हमेशा अनिर्धारित व्यवहार है?
ऑब्जेक्ट इनवेरिएंट बनाए रखने के लिए मैं "वैध स्थिति" लेता हूं। तो इसे stdout पर स्ट्रीम करने के लिए ठीक होना चाहिए, उदाहरण के लिए, लेकिन आप सुरक्षित रूप से 'उदाहरण [0]' तक नहीं पहुंच पाए। मुझे लगता है कि आपके उदाहरणों में से कोई भी यूबी दिखाता है। – juanchopanza
निर्दिष्ट नहीं! = अपरिभाषित, आप स्ट्रिंग प्रिंट कर सकते हैं लेकिन अंदर क्या है इसके बारे में कोई गारंटी नहीं है। – user657267
ठीक है, मैंने देखा कि सभी कार्यान्वयन पर, एसटीएल कंटेनर और स्ट्रिंग बस स्थानांतरित होने के बाद खाली हो जाते हैं। –