рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рд╕реНрдХреЙрдЯ рдореЗрдпрд░реНрд╕, рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ, рдХрдИ рдкреНрд░рд╕рд┐рджреНрдз рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рд▓реЗрдЦрдХ, рдиреЗ рд╕реА ++ 11 рдореЗрдВ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред
рдпрд╣ рд╡рд┐рд╖рдп рдЕрднреА рддрдХ рд╣реИрдмреЗ рдкрд░ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рд╣рд┐рддрдХрд╛рд░реА рд╣реЛрдЧрд╛ред
рдореВрд▓ рд▓реЗрдЦ:
"C ++ 11 рдореЗрдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн - рд╕реНрдХреЙрдЯ рдореЗрдпрд░реНрд╕"C ++ 11 рдореЗрдВ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ
T && рдХрд╛ рдЕрд░реНрде рд╣рдореЗрд╢рд╛ "рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн" рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛:
рд╕реНрдХреЙрдЯ рдореЗрдпрд░реНрд╕рд╢рд╛рдпрдж C ++ 11 рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╡рд╛рдЪрд╛рд░ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рд╣реИред рд╡реЗ рдЙрд╕ рдиреАрдВрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ "рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рд╢рдмреНрджрд╛рд░реНрде (рдЕрдВрдЧреНрд░реЗрдЬреА рдЪрд╛рд▓ рд╢рдмреНрджрд╛рд░реНрде)" рдФрд░ "рдкрд░рд┐рдкреВрд░реНрдг рдЕрдЧреНрд░реЗрд╖рдг" рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред (рдЖрдк
рдереЙрдорд╕ рдмреЗрдХрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдЗрди рддрдВрддреНрд░реЛрдВ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
Syntactically, rvalue рд▓рд┐рдВрдХ рдХреЛ "рд╕рд╛рдорд╛рдиреНрдп" рд▓рд┐рдВрдХ (рдЕрдм lvalue рд▓рд┐рдВрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреА рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдк рдПрдХ рдХреЗ рдмрдЬрд╛рдп рджреЛ рдПрдореНрдкрд░рд╕реЗрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЯрд╛рдЗрдк-рд░реЗрд╡рд▓реНрдпреВ-рд░реЗрдлрд░реЗрдВрд╕-рдЯреВ-рд╡рд┐рдЬреЗрдЯ рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
void f(Widget&& param);
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ rvalue рд╕рдиреНрджрд░реНрднреЛрдВ рдХреЛ && рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ && рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдПрдХ рд░рд╡реИрд▓реНрдпреВ рд╕рдиреНрджрд░реНрдн рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИред
рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ: Widget&& var1 = someWidget;
рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ, рдореИрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ "рдФрд░&" рдХреЗ рджреЛ рдЕрд░реНрдереЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдФрд░ рдирдИ рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдкрд░рд┐рдЪрдп рджреВрдВрдЧрд╛ рдЬреЛ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдХрд┐ "рдФрд░&" рдХрд╛ рдХреМрди рд╕рд╛ рдЕрд░реНрде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдорд╛рдиреЛрдВ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ "&&" рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ "rvalue рд▓рд┐рдВрдХ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рдЖрдк C ++ 11 рдХреЛрдб рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рдЧрд▓рдд рд╕рдордЭреЗрдВрдЧреЗред
рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ && рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рдХрд╛ рдЕрд░реНрде рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╛ рддреЛ рдПрдХ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рдпрд╛ рдПрдХ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ "&&" рдХрд╛ рдорд╛рди "рдФрд░", рдЕрд░реНрдерд╛рддреН рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдПрдХ рд░рд╡реИрд▓реНрдпреВ рд░реЗрдлрд░реЗрдВрд╕ ("&&") рдХрд╛ рд░реВрдк рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рд░реЗрдлрд░реЗрдВрд╕ ("рдФрд░") рд╣реЛрддрд╛ рд╣реИред
рд▓рд┐рдВрдХ рдПрдХ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИрдВ, рдЬреЛ рд▓рд┐рдВрдХ рдпрд╛ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рд╣реЛрддреА рд╣реИрдВред рддреЛ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд▓рд┐рдВрдХ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдВрддрд░рд╛рд▓ рд▓рд┐рдВрдХ, рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдмрд╛рдВрдзрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реАрдорд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрдВрддрд░рд╛рд▓ рд▓рд┐рдВрдХ рдФрд░ рдкреНрд░рддрд┐рдмрдВрдз рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗрд╡рд▓ рддрднреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдЬрдм рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ рдПрдХ рд╕реНрдерд┐рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, T &ред) рд▓рд┐рдВрдХ, && рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдпрд╛ рддреЛ рд▓рд┐рдВрдХ рдпрд╛ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рд╕реЗ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд▓рдЪреАрд▓реЗ рд▓рд┐рдВрдХ рдЙрдирдХреЗ рдирд╛рдо рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ
"рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ" рд▓рд┐рдВрдХ рдХрд╣рд╛ ред
"&&" рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬрдм рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдХрд╛ рдЕрд░реНрде рд╣реИ (рдЬрдм рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ "&&" рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд░реНрде рд╣реЛ рд╕рдХрддрд╛ рд╣реИ "рдФрд░") рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИрдВ, рддреЛ рдореИрдВ рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджреВрдВрдЧрд╛ред рдЕрдм, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рджреИрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдпрд╣реА рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдпрджрд┐ рдХреБрдЫ
рдШрдЯрд╛рдП рдЧрдП рдкреНрд░рдХрд╛рд░ T рдХреЗ рд▓рд┐рдП
T рдпрд╛& рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░ рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рдЪрд░ рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИред
рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рд╕реАрдорд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреА рд╣реИ рдЬрд╣рд╛рдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓рдЧрднрдЧ рд╕рднреА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред рдФрд░ рдЪреВрдВрдХрд┐ рдСрдЯреЛ-рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдпрдо рдореВрд▓ рд░реВрдк рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдСрдЯреЛ-рдШреЛрд╖рд┐рдд рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рд╕рдВрднрд╡ рд╣реИрдВред рд╡реЗ рдЕрдХреНрд╕рд░ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреБрдЫ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдг рдХрдо рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдХреЗ "рдЫреЛрдЯреЗ рд╡рд┐рд╡рд░рдг" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдореИрдВ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рдордп рдФрд░ рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рд╣рдо "рдЫреЛрдЯреЗ рд╡рд┐рд╡рд░рдг" рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ, рддрдм рддрдХ рдореИрдВ рдорд╛рди рд▓реВрдВрдЧрд╛ рдХрд┐ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдСрдЯреЛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдШреЛрд╖рд┐рдд рдЪрд░ред
T && рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рдШреЛрд╖рдгрд╛ рдлреЙрд░реНрдо рдПрдХ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рддрдирд╛ рдпрд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдмрд╛рдж рдореЗрдВ рд▓реМрдЯреВрдВрдЧрд╛ред рдЗрд╕ рдмреАрдЪ, рдмрд╕ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВред
рд╕рднреА рд▓рд┐рдВрдХ рдХреА рддрд░рд╣, рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рд╣реИ, рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ рдпрд╛ рдПрдХ рд░реИрд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛:
- рдпрджрд┐ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдиреНрджрд░реНрдн рдХреЛ рдЖрд░рдореНрдн рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд▓рд╡рд▓реНрдпреВ рд╣реИ, рддреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдиреНрджрд░реНрдн рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рд╕рдиреНрджрд░реНрдн рдмрди рдЬрд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдиреНрджрд░реНрдн рдХреЛ рдЖрд░рдореНрдн рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡реНрдпрдВрдЬрдХ рдЖрд╡реЗрдЧ рд╣реИ, рддреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдиреНрджрд░реНрдн рдПрдХ рд╕рдиреНрджрд░реНрдн рд╕рдВрджрд░реНрдн рдмрди рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рддрднреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдк рд▓рд╡рд▓реАрди рдХреЛ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВред рдЗрди рд╢рд░реНрддреЛрдВ рдХреА рдПрдХ рд╕рдЯреАрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ (C ++ 11 рдорд╛рдирдХ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдорд╛рдорд▓реЗ рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ), рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
- рдпрджрд┐ рдЖрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред
- рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рд╕рдВрджрд░реНрдн рд╣реИ (рдпрд╛рдиреА, рдЯреАрдПрдВрдб рдпрд╛ рдХрд╛рд╕реНрдЯ рдЯреА рдПрдВрдб, рдЖрджрд┐), рддреЛ рдпрд╣ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╣реИред
- рдЕрдиреНрдпрдерд╛, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд╣реИред рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ (рдФрд░ рдЖрдорддреМрд░ рдкрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ), рдЕрд╕реНрдерд╛рдИ рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рд▓реМрдЯреЗ рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдПред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╢рд╛рдмреНрджрд┐рдХ (рдЬреИрд╕реЗ 10 рдФрд░ 5.3) рднреА рд╡реНрдпрд╛рдкреНрдд рд╣реИрдВред
рдЖрдЗрдП рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ:
Widget&& var1 = someWidget; auto&& var2 = var1;
рдЖрдк рдкрддрд╛ var1 рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрд░рдорд╢рдГ var1 рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╣реИред Var2 рдХреЛ рдСрдЯреЛ рдФрд░& рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ var2 рдХреЛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдЗрд╕реЗ var1 (lvalue) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, var2 рдПрдХ lvalue рд╕рдВрджрд░реНрдн рдмрди рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд╛рдкрд░рд╡рд╛рд╣ рдкрдврд╝рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ var2 рдПрдХ рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн рд╣реИ; рд╡рд┐рдЬреНрдЮрд╛рдкрди рдореЗрдВ "рдФрд░&", рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ var2 рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рд╕рдВрджрд░реНрдн рд╣реИред рдпрд╣ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ var2 рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
Widget& var2 = var1;
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдЧрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдВрдХ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
std::vector<int> v; ... auto&& val = v[0];
рд╡реИрд▓ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИ рдФрд░ рдЖрд░рдВрднреАрдХреГрдд v [0], рдпрд╛рдиреА рдХреЙрд▓рд┐рдВрдЧ рдПрд╕рдЯреАрдбреА рдХрд╛ рдкрд░рд┐рдгрд╛рдо :: рд╡реЗрдХреНрдЯрд░ <int> :: рдСрдкрд░реЗрдЯрд░ []ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдХреНрдЯрд░ рддрддреНрд╡ рдХрд╛ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ (рдореИрдВ рд╕рд░рдгреА рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред
рдЪреВрдБрдХрд┐ рд╕рднреА рд▓реИрд╡рд▓реНрдпреВ рд╕рдВрджрд░реНрдн рд▓реИрд╡рд▓реНрдпреВрдЬрд╝ рд╣реИрдВ, рдФрд░ рдЪреВрдВрдХрд┐ рдЗрд╕ рд▓реИрд╡рд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реИрд▓реА рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реИрд▓ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рд░реЗрдлрд╝рд░реЗрдВрд╕ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡реИрд▓-рдЯрд╛рдЗрдк рдШреЛрд╖рдгрд╛ рдПрдХ рд░реЗрд╡рд▓реНрдпреВ рд╕рдВрджрд░реНрдн рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рд╕рдмрд╕реЗ рдЖрдо рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
template<typename T> void f(T&& param);
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде,
f(10);
рдкрд░рдо рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ 10 рдХреЗ рд╕рд╛рде рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдХрд┐ рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХреЙрд▓ рдЯреВ рдПрдл рдореЗрдВ, рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдкрд░рдо рд░реЗрдлрд░реЗрдВрд╕ рдХреЛ рдЖрд░рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рд░реИрд╡рд▓реНрдпреВ рд░реЗрдлрд░реЗрдВрд╕ рдмрди рдЬрд╛рддрд╛ рд╣реИ-рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ int &&
рджреВрд╕рд░реА рдУрд░, рдЕрдЧрд░ f рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
int x = 10; f(x);
рдкреИрд░рд╛рдо рдХреЛ рд╡реЗрд░рд┐рдПрдмрд▓ x рд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реИрд╡рд▓реНрдпреВ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЙрд▓ рдЯреВ f рдореЗрдВ, рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдкрд░рдо рд░реЗрдлрд╝рд░реЗрдВрд╕ рдХреЛ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдкрд░рдо рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП тАУL & - рдХреЗ рд▓рд┐рдП рд▓реИрд╡рд▓реНрдпреВ рд░реЗрдлрд░реЗрдВрд╕ рдмрди рдЬрд╛рддрд╛ рд╣реИред
F рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдЖрдЧреЗ рдХреА рдЯрд┐рдкреНрдкрдгреА рдЕрдм рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП: рдХреНрдпрд╛ рдкрд░рдо рдкреНрд░рдХрд╛рд░ рдПрдХ рд▓рд╡рд▓реНрдпреВ рд╕рдВрджрд░реНрдн рд╣реИ рдпрд╛ рдПрдХ рд░рд╡реИрд▓реНрдпреВ рд░реЗрдлрд░реЗрдВрд╕ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди f рдХреЛ рдХреНрдпрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрднреА-рдХрднреА рдкрд░рдо рдПрдХ рд░реЗрд╡рд▓реЗ рд╕рдВрджрд░реНрдн рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдПрдХ рд░реЗрд╡рд▓реЗ рд╕рдВрджрд░реНрднред рдпрд╣реА рд╣реИ, рдкрд░рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИред
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ && рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдЬрдм рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реЛрддрд╛ рд╣реИред рдЬрд╣рд╛рдБ рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд╣реИ, рд╡рд╣рд╛рдБ рдХреЛрдИ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ "&&" рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн рдХрд╛ рдорддрд▓рдм рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП:
template<typename T> void f(T&& param);
рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрджрд┐ рдЖрдк T && (рдЬрд╣рд╛рдВ T рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ) рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЯрд╛рдЗрдк рдЗрдВрдлрд╝реЗрдХреНрд╢рди рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдпрджрд┐ рдЖрдк рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреЗрдЯ рдФрд░&) рдХреЗ рдмрд╛рдж "&&" рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк rvalue рд▓рд┐рдВрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдШреЛрд╖рдгрд╛ рдкрддреНрд░ "T &&" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд▓рд┐рдВрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛред рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдШреЛрд╖рдгрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ:
template<typename T> void f(std::vector<T>&& param);
рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реИрдВ рдФрд░ "&&" - рд╡рд░реНрдгрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдШреЛрд╖рд┐рдд рд░реВрдк "T &&" рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди "std :: рд╡реЗрдХреНрдЯрд░ <T> &&" рд╣реИред рдирддреАрдЬрддрди, рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн рд╣реИ, рди рдХрд┐ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрднред рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рдШреЛрд╖рдгрд╛ рдХреЗрд╡рд▓ "T &&" рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ! рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдХрд╛рдВрд╕реНрдЯреЗрдмрд▓ рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП "&&" рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИред
template<typename T> void f(const T&& param);
рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "T &&" рдХреЗрд╡рд▓ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреА рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
template<typename MyTemplateParamType> void f(MyTemplateParamType&& param);
рдХрднреА-рдХрднреА рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛рдкрддреНрд░ рдореЗрдВ T && рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ T рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд╣реАрдВ рд╣реИред Std :: рд╡реЗрдХреНрдЯрд░ рдореЗрдВ push_back рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
std::vector::push_back): template <class T, class Allocator = allocator<T> > class vector { public: ... void push_back(T&& x);
рдпрд╣рд╛рдБ T рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдФрд░ push_back T && рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ! рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдЙрддреНрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдкреБрд╢_рдмреИрдХ рдХреИрд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдПрд▓реЛрдХреЗрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЧрд╛рдпрдм рд╣реИ рддрд╛рдХрд┐ рдХреЛрдб рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдШреЛрд╖рдгрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ
std :: рд╡реЗрдХреНрдЯрд░ :: push_back:
template <class T> void vector<T>::push_back(T&& x);
push_back std рдХреЗ рдмрд┐рдирд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ :: рд╡реЗрдХреНрдЯрд░ <T> рд╡рд░реНрдЧ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрдЧ рдПрд╕рдЯреА :: рд╡реЗрдХреНрдЯрд░ <рдЯреА> рд╣реИ, рддреЛ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЯреА рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрдЯреМрддреА рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдБ
Widget makeWidget();
рддрдм push_pack рдХрд╛ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ std :: рд╡реЗрдХреНрдЯрд░ <рд╡рд┐рдЬреЗрдЯ> рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдмрддрд╛ рджреЗрдЧрд╛ред рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдЙрд╕рдХреА рдШреЛрд╖рдгрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
void std::vector<Widget>::push_back(Widget&& x);
рдХреНрдпрд╛ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ? рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЧ std :: рд╡реЗрдХреНрдЯрд░ <рд╡рд┐рдЬреЗрдЯ> рд╣реИ, рдкреБрд╢_рдмреИрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреА рддреБрд▓рдирд╛ emplace_back std :: рд╡реЗрдХреНрдЯрд░ рд╡рд┐рдзрд┐ рд╕реЗ рдХрд░реЗрдВ, рдЬреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ:
template <class T, class Allocator = allocator<T> > class vector { public: ... template <class... Args> void emplace_back(Args&&... args);
рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ рдХрд┐ emplace_back рддрд░реНрдХ рдХреА рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрд░реНрдЧреНрд╕ рдФрд░ рдЖрд░реНрдЧрдиреНрд╕ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрд╣рд╛рдБ рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Args рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд░реНрдЧ T рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рднрд▓реЗ рд╣реА рд╡рд░реНрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реЛ, std :: рд╡реЗрдХреНрдЯрд░ <рд╡рд┐рдЬреЗрдЯ> рдХрд╣реЛ, рдпрд╣ emplace_back рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ (рдУрдВ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред Std :: рд╡реЗрдХреНрдЯрд░ <рд╡рд┐рдЬреЗрдЯ> рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдХреА рдЧрдИ emplace_back рдШреЛрд╖рдгрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рджрд┐рдЦрд╛рддреА рд╣реИ (рдореИрдВ рдПрд▓реЛрдХреЗрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВ):
template<class... Args> void std::vector<Widget>::emplace_back(Args&&... args);
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╡рд░реНрдЧ std :: рд╡реЗрдХреНрдЯрд░ <рд╡рд┐рдЬреЗрдЯ> emplace_back рдХреЛ рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ (рдУрдВ) рдХреЛ рдШрдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, std :: рд╡реЗрдХреНрдЯрд░ :: emplace_back рдкреИрд░рд╛рдореАрдЯрд░ std рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рд╣реИрдВ :: рд╡реЗрдХреНрдЯрд░ :: push_back рд╕рдВрд╕реНрдХрд░рдг рдкреИрд░рд╛рдореАрдЯрд░, рдЬреЛ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛, рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд▓рд┐рдВрдХ рд╣реИред
рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╕реНрд╡рд░ рд╣реИ рдпрд╛ рдПрдХ рд╕реНрд╡рд░ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред рдкреНрд░рдХрд╛рд░ int рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╡рд╣рд╛рдБ рдкреНрд░рдХрд╛рд░ int (рдЬреИрд╕реЗ int рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдЪрд░) рдХрд╛ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд░ int (рдЬреИрд╕реЗ рд╢рд╛рдмреНрджрд┐рдХ, рдЙрджрд╛рд╣рд░рдг 10) рдХрд╛ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╣реИред рдпрд╣ рд╡рд┐рдЬреЗрдЯ рдЬреИрд╕реЗ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред рдПрдХ рд╡рд┐рдЬреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдЬреЗрдЯ рдЪрд░) рдпрд╛ рдПрдХ рд░рд┐рд╡реЗрд▓реНрдпреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝реИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рдЬреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рд╣реИ)ред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╣реИ рдпрд╛ рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд╣реИред
Widget makeWidget();
рд▓реЗрд╡реЗрд▓реНрдпреВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП var1) рдХреЛ рдПрдХ рд░реИрд╡рд▓реНрдпреВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ std :: move рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП var2 рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Widget var2 = std::move(var1);
рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП static_cast рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреЛрдб рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджрд┐рдпрд╛ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн (рд╡рд┐рдЬреЗрдЯ рдФрд░&) рд╣реИред
рдирд╛рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ rvalue рд╕рдВрджрд░реНрдн lvalue рд╣реИрдВред (рдЖрдк рдЙрдирдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред) рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╡рд┐рдЬреЗрдЯ рдФрд░ рдЧреИрдЬреЗрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
template<typename T> class Widget { ... Widget(Widget&& rhs);
рд╡рд┐рдЬреЗрдЯ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ, rhs рдПрдХ рд░реЗрд╡рд▓реНрдпреВ рд░реЗрдлрд░реЗрдВрд╕ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд░рд┐рд╡реЗрд▓реНрдпреВ (рдпрд╛рдиреА рд░рд┐рд╡реЗрд▓реНрдпреВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди rhs рд╣реА рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд░рд┐рд╡реИрд▓реНрдпреВ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдХрд┐ rhs rueue рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╣рдорд╛рд░реА рдЗрдЪреНрдЫрд╛, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ rhs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП ldue рдХреЛ rvalue рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП std :: Move рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдЧреИрдЬреЗрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ rhs рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдпрд╛ рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, rhs рдЦреБрдж рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╣реИред рдпрджрд┐ рдпрд╣ рд╡реНрдпрд╛рдкреНрддрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ rhs рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирдирд╛ тАЛтАЛрдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдкрд░ рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ std :: рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╣реИ: рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо ("рдЖрдЧреЗ") рд╣рдорд╛рд░реА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд╣рдореЗрд╢рд╛ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ (рдмрдЪрд╛рд╡ рдпрд╛ рдЕрдВрддрд░рд╛рд▓) рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди std :: Move and std :: рдЖрдЧреЗ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдЦ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ && рд╢рд╛рдпрдж рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╡рд┐рдЪрд▓рд┐рдд рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ "рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реВрдЪрдирд╛" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓рд┐рдВрдХ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ std :: Move рдФрд░ std :: рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╣реИред
рдЫреЛрдЯреЗ рд╡рд┐рд╡рд░рдг
рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕реА ++ 11 рдореЗрдВ рдХреБрдЫ рдирд┐рд░реНрдорд╛рдг рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдВрдХ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдВрдХ рд╕реА ++ рдореЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдХрд╛ рд▓рд┐рдВрдХ рд╣реИ, рддреЛ рдХреЛрдб рдЧрд▓рдд рд╣реИ:
Widget w1; ... Widget& & w2 = w1;
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдВрдХ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдЧрд╛ред рд╣рдо рдЗрд╕реЗ C ++ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, C ++ 98 / C ++ 03ред
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕ рдХреЗ рджреМрд░рд╛рди, рдЬреЛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИ, рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд▓рд╡рд▓реНрдпреВ рдФрд░ рд░реЗрд╡рд▓реНрдпреВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЯрд╛рдЗрдк рдЯреА рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ (рдпрд╛рдиреА, рдЯреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╕рдВрджрд░реНрдн), рдФрд░ рдЯрд╛рдЗрдк рдЯреА рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИред (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рд░рд┐рд╡реЗрд▓реНрдпреВ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд╣реИ!) рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдВрддрд░рд╛рд▓ рдФрд░ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рд╣реИ:
template<typename T> void f(T&& param); ... int x; ... f(10);
10 T рдХреЗ рд╕рд╛рде f рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ f рдХреА рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
void f(int&& param);
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, lvalue x рдХреЗ рд╕рд╛рде f рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдореЗрдВ, T рдЗрдВрдЯ & рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдФрд░ f рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рд▓рд┐рдВрдХ рдХрд╛ рд▓рд┐рдВрдХ рд╣реИ:
void f(int& && param);
рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛрдб рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд░реЛрдд рдХреЛрдб "f (x)" рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, C ++ "рд▓рд┐рдВрдХ рдлреЛрд▓реНрдбрд┐рдВрдЧ" рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рд▓рд┐рдВрдХ рдХрд╛ рд▓рд┐рдВрдХ рдХрд┐рд╕реА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рдиреЗ рдЬреИрд╕реЗ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдВрдХ (рд▓рд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ рдФрд░ рд░рд┐рд╡реЗрд▓реНрдпреВ рд▓рд┐рдВрдХ) рд╣реЛрддреЗ рд╣реИрдВ, рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рдХреЗ рдЪрд╛рд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрди рд╣реЛрддреЗ рд╣реИрдВ: рд▓реИрд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ рд╕реЗ рд▓реЗрд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ, рд░реЗрд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рд▓реЗрд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ, рд░реЗрд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ рд╕реЗ рд▓реЗрд╡рд▓реНрдпреВ рд▓рд┐рдВрдХ рдФрд░ рд░рд┐рд╡реЗрд▓реНрдпреВ рд▓рд┐рдВрдХ рд╕реЗ рд░рд┐рд╡реЗрд▓реНрдпреВ рд▓рд┐рдВрдХред рд▓рд┐рдВрдХ рддрд╣ рдХреЗ рдХреЗрд╡рд▓ рджреЛ рдирд┐рдпрдо рд╣реИрдВ:
- рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдбрд╝реА рд▓рд┐рдВрдХ ("рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ") рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд▓рд┐рдВрдХ рдмрди рдЬрд╛рддрд╛ рд╣реИред
- рд▓рд┐рдВрдХ рдХреЗ рдЕрдиреНрдп рд╕рднреА рд▓рд┐рдВрдХ (рдпрд╛рдиреА, рд╕рднреА рд▓рд┐рдВрдХ рдЬрд┐рд╕рдореЗрдВ lvalue рд▓рд┐рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) рдПрдХ lvalue рд▓рд┐рдВрдХ рдореЗрдВ рдврд╣ рдЧрдП рд╣реИрдВред
рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рдПрдХ lvalue рдХреЗ рд╕рд╛рде рдЪ рдХреЛ рддреБрд░рдВрдд рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╣реА рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:
void f(int& param);
рдпрд╣ рд╕рдЯреАрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ (рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдмрдВрдз рдФрд░ рд▓рд┐рдВрдХ рдХреЛ рдореЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж) рдХреЛ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд▓рд┐рдВрдХ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдорд╛рддреНрд░ рд▓рд┐рдВрдХ рд╣реИред
рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдЬрдм рдПрдХ рдкреНрд░рдХрд╛рд░ рдЪрд░ рдХреЗ рд▓рд┐рдП рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓рд┐рдВрдХ рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рднрд╛рдЧ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐
int x; ... int&& r1 = 10;
рддрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп r1 рдФрд░ r2 рджреЛрдиреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ int рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рд┐рдВрдХ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рдпрдореЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реИрд╡рд▓реНрдпреВ рдЯреА рдЯрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ, рдФрд░ рдЯрд╛рдЗрдк рдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рд╡реЗрд▓реНрдпреВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрди рдХреЙрд▓реЛрдВ рдореЗрдВ,
f(r1); f(r2);
r1 рдФрд░ r2 рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдШрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдХрд╛рд░ int & рд╣реЛрдЧрд╛ред рдХреНрдпреЛрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рдХрд╛рд░ r1 рдФрд░ r2 рдХреЗ рд╕рдВрджрд░реНрдн рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ int рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ), рдлрд┐рд░, рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╣реИ, рджреЛрдиреЛрдВ рдХреЛ f рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдореЗрдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП int рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓рд┐рдВрдХ рддрд╣ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, "рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рддрддреНрдХрд╛рд▓ рдХрд░рдирд╛"ред рджреВрд╕рд░рд╛ рдРрд╕рд╛ рд╕рдВрджрд░реНрдн "рдСрдЯреЛ" рдЪрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИред рдСрдЯреЛ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕, рдЬреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕ рдХреЗ рд╕рдорд╛рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИрдВ, рдЬреЛ рдХрд┐ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд░реЗрдлрд░реЗрдВрд╕ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдк рдЯреА рдХрд╛ рдПрдХ рд▓реИрд╡рд▓реНрдпреВ рдЯрд╛рдЗрдк T & рд╣реЛрдиреЗ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдФрд░ рдЯрд╛рдЗрдк T рдХрд╛ рдПрдХ рд░рд┐рд╡реНрдпреВ рдЯрд╛рдЗрдк T & рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдЙрдЯрдкреБрдЯ рд╣реИред рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
Widget&& var1 = someWidget;
рдкреНрд░рдХрд╛рд░ var1, рд╡рд┐рдЬреЗрдЯ && рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ "рд╕рдВрджрд░реНрдн рднрд╛рдЧ" рдХреЛ рдкреНрд░рдХрд╛рд░ 2 рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рджреМрд░рд╛рди рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдЬреЗрдЯ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн (var2) рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдШрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдХрд╛рд░ рд╡рд┐рдЬреЗрдЯ рдФрд░ рд╣реЛрдЧрд╛ред рд╡рд░реНрд╕реЗрдЯреНрдпреВрд▓рд┐рдВрдЧ рд╡рд┐рдЬреЗрдЯ рдФрд░ var2 рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдСрдЯреЛ рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдорд╛рдиреНрдп рдХреЛрдб рдорд┐рд▓рддреЗ рд╣реИрдВ,
Widget& && var2 = var1;
рдЬреЛ рдореЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд▓рд┐рдВрдХ рдмрди рдЬрд╛рдПрдВрдЧреЗ
Widget& var2 = var1;
рд▓рд┐рдВрдХ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░рд╛ рд╕рдВрджрд░реНрдн рдЯрд╛рдЗрдкрдбреЗрдл рдХрд╛ рдЧрдарди рдФрд░ рдЙрдкрдпреЛрдЧ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП
template<typename T> class Widget { typedef T& LvalueRefType; ... };
рдФрд░ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ,
Widget<int&> w;
рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рдЕрдорд╛рдиреНрдп) рдЯрд╛рдЗрдкрдлреЗрдб рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:
typedef int& & LvalueRefType;
рдлреЛрд▓реНрдбрд┐рдВрдЧ рд▓рд┐рдВрдХ рдирд┐рдореНрди рдорд╛рдиреНрдп рдХреЛрдб рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:
typedef int& LvalueRefType;
рдпрджрд┐ рд╣рдо рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕ рдЯрд╛рдЗрдкрдлреЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
void f(Widget<int&>::LvalueRefType&& param);
рдЯрд╛рдЗрдкрд░рд╛рдЗрдл рддреИрдирд╛рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╡реИрдз рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛ рдЬрд╛рдПрдЧрд╛,
void f(int& && param);
рд▓реЗрдХрд┐рди рд▓рд┐рдВрдХ рдХреЛ рдореЛрдбрд╝рдиреЗ рд╕реЗ рдпрд╣ рдЫреЛрдЯрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ f рдХреА рдЕрдВрддрд┐рдо рдШреЛрд╖рдгрд╛ рд╣реЛрдЧреА:
void f(int& param);
рдЕрдВрддрд┐рдо рд╕рдВрджрд░реНрдн рдЬрд╣рд╛рдВ рд▓рд┐рдВрдХ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбрд┐рдХреНрд▓реЗрдкрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдСрдЯреЛ рдХреА рддрд░рд╣, рдШреЛрд╖рдгрд╛рдкрддреНрд░ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдпрд╛ рддреЛ T рдпрд╛ T & рдкреИрджрд╛рд╡рд╛рд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рддреЛ C ++ 11 рд▓рд┐рдВрдХ рддрд╣ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдШреЛрд╖рдгрд╛рдкрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓рд┐рдВрдХ рддрд╣ рдирд┐рдпрдо рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдпрд╛ рдСрдЯреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░рддреЗ рд╕рдордп рд╕рдорд╛рди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИрдВ (рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП "рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА" рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ), рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЧреИрд░-рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдорд┐рдд рдЪрд░ рдХреЗ рд▓рд┐рдП рдШреЛрд╖рд┐рдд рдЯрд╛рдЗрдк рдЯреА (рдпрд╛рдиреА рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ), рдЬрдм рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рд╣реЛрддрд╛ рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдСрдЯреЛ рдкреНрд░рдХрд╛рд░ рдЯреА рдПрдВрдб рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рдХреНрд╡реЗрд╕реНрдЯ рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕ рдХреЗрд╡рд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдбрд┐рдХреНрд▓реЗрдкрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ; рдЖрд░рдВрднрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП: Widget w1, w2; auto&& v1 = w1;
рдирд┐рд╖реНрдХрд░реНрд╖
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ, "&&" рдХрд╛ рдЕрд░реНрде рдпрд╛ рддреЛ рдПрдХ рд▓рд┐рдВрдХ рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд▓рд┐рдВрдХ рд╣реИ - рдПрдХ рд▓рд┐рдВрдХ рдЬреЛ рдпрд╛ рддреЛ рдПрдХ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рдпрд╛ рдПрдХ рд▓рд┐рдВрдХ рд╣реИред рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП T && рдлреЙрд░реНрдо рд▓реЗрддреЗ рд╣реИрдВред T.рд▓рд┐рдВрдХ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓рд┐рдВрдХреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рд╣реИ (рдЬреЛ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрднреА-рдХрднреА рд▓рд┐рдВрдХ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрднреА-рдХрднреА рд▓рд┐рдВрдХ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдХрд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд▓рд┐рдВрдХ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ, рдСрдЯреЛ-рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдиреЗ, рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╕рдВрджрд░реНрдн рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рд╣реИрдВредрдзрдиреНрдпрд╡рд╛рдж
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдбреНрд░рд╛рдлреНрдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреИрд╕рд┐рдпреЛ рдиреЗрд░реА, рдорд┐рдЦрд▓ рдореЛрдХреЗрдиреА, рд╣реЙрд╡рд░реНрдб рд╣рд╛рдЗрдиреЗрдВрдЯ, рдЖрдВрджреНрд░реЗрдИ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗрд╕реНрдХреБ, рд╕реНрдЯреЗрдлрд╝рди рдЯреАред рд▓рд╛рд╡реЗрдЬ, рд░реЛрдЬрд░ рдУрд░, рдХреНрд░рд┐рд╕ рдУрд▓реНрдбрд╡реБрдб, рдЬреЛрдирд╛рдерди рд╡реЗрдХреНрд▓реА рдФрд░ рдПрдВрдердиреА рд╡рд┐рд▓рд┐рдпрдореНрд╕ рдиреЗ рдХреА рд╣реИред рдЙрдирдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдиреЗ рд▓реЗрдЦ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛, рд╕рд╛рде рд╣реА рдЗрд╕рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рднреАредрдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА
рд╕реА ++ 11, рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛редрдирдИ C ++ (C ++ 11) рдХрд╛ рдЕрд╡рд▓реЛрдХрди, рд╕реНрдХреЙрдЯ рдореЗрдпрд░реНрд╕, рдЖрд░реНрдЯрд┐рдорд╛ рдкреНрд░реЗрд╕, рдЕрдВрддрд┐рдо рдмрд╛рд░ рдЬрдирд╡рд░реА 2012 рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛редC ++ рд░рд┐рд╡реЗрд▓реНрдпреВ рд░реЗрдлрд░реЗрдВрд╕ рд╕рдордЭрд╛рдпрд╛, рдереЙрдорд╕ рдмреЗрдХрд░, рдЕрдВрддрд┐рдо рдмрд╛рд░ рд╕рд┐рддрдВрдмрд░ 2011 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред"рдПрдХ рдиреЛрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШреЛрд╖рдгрд╛," рдПрдВрдбреНрд░рдпреВ Koenig, рдбреЙред рдбреЛрдм рдХреА, 27 рдЬреБрд▓рд╛рдИ, 2011ред