[C++] The C++ Programming Language: 7. Pointers, Arrays, and References (3) - Rvalue References, References to References
7.7.2 Rvalue References 한 종류 이상의 참조들에 대한 기본적인 아이디어는 서로 다른 객체의 사용법들을 지원하기 위함입니다. non-const lvalue 참조는 객체를 참조하며, 객체는 사용자가 작성할 수 있는 것입니다. const lvalue 참조는 상수를 참조하며, 상수는 참조의 사용자 관점에서 불변한 것입니다. rvalue 참조는 임시 객체를 참조하며, 이는 참조의 사용자가 다시는 사용하지 않을 것이라고 생각하고, (일반적으로)변경할 수 있는 객체를 참조하는 것입니다. 우리는 참조가 정말 임시로 참조하는지를 알고 싶습니다. 만약 그렇다면, 때때로 비용이 비싼 복사 연산 대신 저렴한 이동 연산으로 전환할 수 있을 것이기 때문이죠. 잠재적으로 엄청난 양의 정보를 가리키는(pointing) 작은 기술자(descriptor)에 의해 제공되는 객체는, 만약 그것이 더이상 사용되지 않을 것을 안다면 단순하고 저렴하게 이동될 수 있을 것입니다. 전형적인 예로 반환 값을 들 수 있습니다. 반환되는 지역 변수는 결코 다시 사용되지 않을 것임을 컴파일러가 알기 때문이죠. rvalue 참조는 rvalue에 바인딩 될 수 있으나, lvalue에는 될 수 없습니다. 따라서, rvalue 참조는 lvalue 참조의 정반대에 있는 것입니다: 1 2 3 4 5 6 7 8 9 10 11 12 string var { "Cambridge" } ; string f( ) ; string & r1 {var} ; // lvalue reference, bind r1 to var (an lvalue) string & r2 {f( ) } ; // lvalue reference, error : f() ...