द्वारा स्थानांतरित सक्षम कक्षाओं के लिए इन दोनों के बीच कोई अंतर है?मूल्य या रावल्यू-रेफ
struct Foo {
typedef std::vector<std::string> Vectype;
Vectype m_vec;
//this or
void bar(Vectype&& vec)
{
m_vec = std::move(vec);
}
//that
void bar(Vectype vec)
{
m_vec = std::move(vec);
}
};
int main()
{
Vectype myvec{"alpha","beta","gamma"};
Foo fool;
fool.bar(std::move(myvec));
}
मेरे समझ है कि अगर आप एक lvalue myvec
का उपयोग आप भी की Foo::bar()
Vectype&&
के बाद से बाध्य नहीं होगा const Vectype&
संस्करण को पेश करने के लिए आवश्यक है। यह एक तरफ है, रावल्यू मामले में, Foo::bar(Vectype)
चालक कन्स्ट्रक्टर का उपयोग करके वेक्टर का निर्माण करेगा या बेहतर है कि प्रतिलिपि सभी को एक साथ जोड़कर देखें, वीसी एक रावल्यू है (क्या होगा?)। तो क्या लेल्यू और रावल्यू ओवरलोड के बजाय मूल्य घोषणा द्वारा प्राथमिकता प्राप्त करने का कोई अनिवार्य कारण नहीं है? (मुझे किसी भी मामले में वेक्टर को सदस्य चर में कॉपी करने की आवश्यकता है।)
किसी भी पेडेंट्री से पहले मुझे पता है कि ओवरलोड्स महत्वाकांक्षी हैं। –