rvalue 참조와 && 구문
rvalue 참조로 임시 객체에 연결하여 자원을 효율적으로 이전합니다.
rvalue 참조와 && 구문은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
&& 문법
r값 참조는 T&&로 선언합니다. 이 참조는 곧 소멸할 임시 객체인 r값에만 바인딩됩니다.
int&& ref = 42; // OK: binds to literal
int x = 10;
// int&& bad = x; // ERROR: x is an lvaluer값 참조가 필요한 이유
인수가 곧 소멸할 것임을 아는 함수를 작성할 수 있습니다. 복사하지 않고 인수의 자원을 가져올 수 있습니다.
참조 형식에 따른 함수 오버로드
T&와 T&&를 기준으로 함수를 오버로드할 수 있습니다. 컴파일러는 인수의 범주에 따라 올바른 함수를 선택합니다.
void process(std::string& s) { std::cout << "lvalue\n"; }
void process(std::string&& s) { std::cout << "rvalue\n"; }
std::string s = "hi";
process(s); // lvalue
process("temp"); // rvalue
process(std::move(s)); // rvalue이름이 있는 r값 참조는 l값이 됩니다
r값 참조에 이름을 지정하면 그 이름 자체가 l값이 됩니다. 식별성이 고정되기 때문입니다. r값의 성질을 되찾으려면 std::move를 사용하십시오.
void f(std::string&& s) {
// inside f, the parameter s is an lvalue
g(s); // passes s by lvalue
h(std::move(s)); // passes s as an rvalue
}std::move는 형 변환입니다
std::move(x)는 그 자체로 아무것도 이동하지 않습니다. x를 r값 참조로 반환하는 형 변환일 뿐입니다. 실제 이동은 이를 받는 생성자에서 일어납니다.
// equivalent to
static_cast<std::string&&>(s)이동이라고 부르는 이유
이 이름은 일반적인 사용 방식, 즉 내용물을 훔치려는 객체를 전달하는 상황을 나타냅니다. 하지만 std::move 자체가 아무것도 전송하지는 않습니다.
보편 참조(전달 참조)
추론된 T를 사용하는 템플릿에 T&&가 나타나면 이를 전달 참조라고 합니다. l값과 r값 모두에 바인딩되며 범주를 유지합니다.
template <typename T>
void wrapper(T&& arg) {
process(std::forward<T>(arg));
}참조 축약
템플릿을 통해 참조가 겹쳐지면 언어가 다음과 같이 축약합니다:
T& &→T&T& &&→T&T&& &→T&T&& &&→T&&
move를 사용하지 말아야 할 때
int, double, 포인터처럼 단순 복사 가능한 형식에서는 이동이 복사와 같습니다. std::move를 호출해도 이점이 없으며 독자를 혼란스럽게 할 수 있습니다.
소유 자원 없이 이동하기
힙 자원이 없는 형식에서는 이동 생성자가 복사 생성자와 같습니다. 이동은 동적 메모리를 소유하는 형식에서만 유용합니다.
흔한 주의 사항: const 객체에서 이동하기
const 객체에 std::move를 사용하면 아무 작업도 하지 않습니다. 이동 생성자는 원본을 수정해야 하므로 const 객체에 대해 호출할 수 없습니다.
빠른 확인
std::move(x)는 실제로 무엇을 합니까?
복습
T&&는 r값에 바인딩됩니다. 이름이 있는 r값 참조는 l값이 되므로, r값의 성질을 되찾으려면 std::move를 사용하십시오. 템플릿에서 T&&는 전달 참조입니다. std::move는 형 변환이며, 이동 자체를 수행하지는 않습니다.
자주 묻는 질문
“rvalue 참조와 && 구문” 강의는 무료인가요?
네 — “rvalue 참조와 && 구문” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“rvalue 참조와 && 구문”에서 뭘 배우나요?
rvalue 참조로 임시 객체에 연결하여 자원을 효율적으로 이전합니다. 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“rvalue 참조와 && 구문” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- lvalue와 rvalue의 차이
- rvalue 참조와 && 구문
- std::move와 std::forward
- 이동 생성자와 이동 대입