lvalue와 rvalue의 차이
값 범주인 lvalue, prvalue 및 xvalue를 추론합니다.
lvalue와 rvalue의 차이은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
두 세계: l값과 r값
C++의 모든 표현식은 l값(이름과 주소가 있는 대상) 또는 r값(이름이 없는 임시 객체)입니다.
l값
l값은 지속되는 객체를 가리키므로 &를 사용하여 주소를 가져올 수 있습니다.
int x = 42; // x is an lvalue
int* p = &x; // taking the address of an lvalue
int& r = x; // r is an lvalue referencer값
r값은 임시 객체입니다. 리터럴, 함수 반환값, a + b와 같은 표현식이 이에 해당합니다. 주소를 가져올 수 없습니다.
int a = 5, b = 3;
int c = a + b; // (a + b) is an rvalue
// int* p = &(a + b); // ERROR: cannot take address of an rvalue이 구분이 중요한 이유
r값은 곧 소멸할 객체입니다. 객체를 복사하는 대신 그 자원을 안전하게 훔칠 수 있으며, 이것이 이동 의미론의 기반입니다.
C++11부터의 세 가지 범주
현대 C++에서는 이 모델을 더 세분화합니다:
- l값 — 이름과 식별성을 가집니다
- pr값(순수 r값) — 순수한 임시 객체입니다(리터럴, 값으로 반환되는 결과)
- x값(소멸 예정 값) — 곧 소멸할 객체입니다(
std::move의 결과)
l값 참조와 r값 참조
l값 참조는 &를 사용하고, r값 참조는 &&를 사용합니다.
int x = 10;
int& lr = x; // lvalue reference
int&& rr = 42; // rvalue reference, binds to literal바인딩 규칙
형식 호환성은 다음과 같습니다:
- l값 참조(
T&)는 l값에 바인딩됩니다 - const l값 참조(
const T&)는 둘 다에 바인딩됩니다 - r값 참조(
T&&)는 r값과 x값에만 바인딩됩니다
decltype으로 확인하기
표현식에 decltype을 사용하여 컴파일러에 해당 표현식의 범주를 물어볼 수 있습니다.
int x = 10;
static_assert(std::is_lvalue_reference<decltype((x))>::value);
// the extra parentheses make decltype yield the lvalue refC++11에서 r값 참조를 추가한 이유
이동 의미론을 사용할 수 있게 하기 위해서입니다. T&&를 받는 생성자는 임시 객체의 내부 데이터를 소유하고 깊은 복사를 피할 수 있습니다.
흔한 실수: 이름이 있는 r값 참조는 l값입니다
r값 참조 변수를 선언하면 이름이 생기므로 l값이 됩니다. 이를 r값으로 전달하려면 std::move를 사용하십시오.
void f(std::string&& s) {
// s here is an lvalue!
process(std::move(s)); // now it is an rvalue again
}완벽한 전달 미리 보기
T&&를 받는 템플릿은 l값 참조 또는 r값 참조 중 하나를 추론합니다. 여기에 std::forward를 함께 사용하면 값 범주를 유지할 수 있습니다. 자세한 내용은 뒤에서 다룹니다.
빠른 확인
다음 표현식 중 r값인 것은 무엇입니까?
복습
l값에는 이름과 주소가 있고, r값은 임시 객체입니다. T&는 l값에 바인딩되고 T&&는 r값에 바인딩됩니다. 이 구분을 통해 이동 의미론을 사용할 수 있으며, 임시 객체의 불필요한 복사를 피할 수 있습니다.
AI 튜터와 함께 C++을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 51
- 레슨
- 203
자주 묻는 질문
“lvalue와 rvalue의 차이” 강의는 무료인가요?
네 — “lvalue와 rvalue의 차이” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“lvalue와 rvalue의 차이”에서 뭘 배우나요?
값 범주인 lvalue, prvalue 및 xvalue를 추론합니다. 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“lvalue와 rvalue의 차이” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- lvalue와 rvalue의 차이
- rvalue 참조와 && 구문
- std::move와 std::forward
- 이동 생성자와 이동 대입