728x90
C++11 부터 지원되는 이동연산자.
* lvalue : 접근할 수 있는 주소를 가진 변수 - 이동연산을 할 수 없음
(이름이 있는 변수, 함수 int a, &foo()
선행 증감 연산자 ++a, --b
lvaule배열의 인덱스 접근 l[n]
string리터럴 "hello move sementics"
등등...)
*prvalue: 접근을 할순 있지만 주소를 가지지 못한 표현식 -이동연산 가능
(리터럴 값 1,1.3f
후행 증감연산자 a++, b--
값 리턴함수 호출 return str1 + str2;
비 참조 캐스팅 static_cast<double>(x), (int)42
등등)
*xvalue : 접근할 수 있는 주소를 가지지만 이동연산을 할 수 있음
rvalue참조를 리턴하는 함수 std::move(x)
rvalue 배열의 인덱스 접근 r[n]
rvalue 참조캐스팅 static_cast<int&&>(i)
등등)
*rvalue = prvalue + xvalue
int tmain(int argc, _TCHAR* argv[])
{
int num1 = 5, num2 = 3;
num1 = 10; // num1은 lvalue, 10은 int형 prvalue
num1 = num2; // num1은 lvalue, num2은 lvalue
int num3 = num1 + num2; // num3은 lvalue, num1 + num2은 prvalue
std::move(num3); // rvalue 참조를 리턴 xvalue
static_cast<DWORD>(num1) // 값으로 캐스팅 lvalue
static_cast<DWORD&&>(num1) // rvalue 참조로 캐스팅 xvalue
}
예제
<Move Semantics>
lvalue와 rvalue를 구분한 파라미터를 받아 처리 가능
이러한 경우 move를 이용하면 캐스팅 가능.
-> 차후 추가 공부 필요
728x90
'CS > C++' 카테고리의 다른 글
static 변수 (0) | 2024.01.05 |
---|---|
name mangling (0) | 2023.12.14 |
L value 와 R value (0) | 2023.12.14 |
얕은복사 / 깊은복사 (0) | 2023.12.14 |
c++ typedef vs using 키워드 차이점 (0) | 2023.12.14 |