हाल ही में, मैंने अपने व्यवहार को समझने के लिए रावलों के साथ "खेला" है। अधिकांश नतीजे मुझे छेड़छाड़ नहीं करते थे, लेकिन फिर मैंने देखा कि अगर मैं स्थानीय चर फेंकता हूं, तो चालक कन्स्ट्रक्टर को बुलाया जाता है।क्यों स्थानीय परिवर्तनीय invokes चालक चालक फेंक?
तब तक, मैंने सोचा कि आंदोलन अर्थशास्त्र नियमों का उद्देश्य यह गारंटी देना है कि ऑब्जेक्ट स्थानांतरित हो जाएगा (और अमान्य हो जाएगा) अगर संकलक यह पता लगा सके कि इसका उपयोग अब और नहीं किया जाएगा (जैसे अस्थायी वस्तुओं में), या उपयोगकर्ता इसका वादा नहीं करता है (जैसा कि std :: move में)।
हालांकि, निम्न कोड में, इस शर्त में से कोई भी नहीं है, और मेरा चर अभी भी स्थानांतरित हो रहा है (कम से कम g ++ 4.7.3 पर)।
वह क्यों है?
#include <iostream>
#include <string>
using namespace std;
int main() {
string s="blabla";
try {
throw s;
}
catch(...) {
cout<<"Exception!\n";
}
cout<<s; //prints nothing
}
यदि ऐसा है, तो gcc में बग की तरह दिखता है। –
@kbok: आप सही हैं, मैंने अपना जवाब हटा दिया है (इसलिए मैं यहां आपकी टिप्पणी का जवाब दे रहा हूं)।मैंने किसी भी तरह से 'कोशिश' ब्लॉक के अंदर घोषित किया था, सवाल को और सावधानी से पढ़ना चाहिए था। क्षमा करें सभी –
कृपया इसे http://gcc.gnu.org/bugzilla पर रिपोर्ट करें - धन्यवाद! –