C ++ 11 rvalues และย้ายความสับสนของซีแมนทิกส์ (คำสั่ง return)
ฉันพยายามเข้าใจการอ้างอิงค่าและย้ายซีแมนทิกส์ของ C ++ 11 อะไรคือความแตกต่างระหว่างตัวอย่างเหล่านี้และสิ่งใดที่จะไม่คัดลอกเวกเตอร์ ตัวอย่างแรก std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); ตัวอย่างที่สอง std::vector<int>&& return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return std::move(tmp); } std::vector<int> &&rval_ref = return_vector(); ตัวอย่างที่สาม std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return std::move(tmp); } std::vector<int> &&rval_ref = return_vector();