[C++] LValue vs RValue (2)
2023.04.29 - [C++/기타] - [C++] lValue vs rValue (1)
[C++] LValue vs RValue (1)
맨 첨에 C를 어정쩡하게 배운 후에 C++ 사용하다 보니 애매하게 이해가 되기도 했고.. 지금도 어느 정도 쓰고 있긴 하지만 아직까지 제대로 감이 잡히지 않아, 공부하며 정리할 겸 남겨본다. https:/
donot-simsim.tistory.com
에서 이어지는 글.
여기서 lvalue, rvalue 에 대해 했으니, 이번 편에는 xvalue를 다뤄보자.
xvalue. glvalue와 rvalue의 특성을 모두 가지고 있다.
xvalue는 풀어서 쓰면 expiring value라고 한다. 즉 [곧 사라지는 값] 이다.
이 곧 사라지는 값인 xvalue은 두 가지의 특성이 있다.
1. 본인이 고유한 주소를 가지고 있다는 점.
2. 그 값을 이동 시킬 수 있다는 점.
이 글에서는 1번에 대해서 예시 코드를 통해 정리해 보았다.
#include <iostream>
#include <vector>
using namespace std;
vector<string> makeVec() {
vector<string> vecStr = { "aa", "bb", "cc" };
return vecStr;
}
int main() {
makeVec();
return 0;
}
위 코드에서 makeVec 함수를 이용하여 xValue를 만들어 보았다.
makeVec 함수에서는 vecStr이라는 vector string을 하나 만들고 return시켜 준다.
그러면 해당 값은 분명히 주소가 있고, 그 안에 실제 값도 있다.
하지만 makeVec()이라는 함수 선언부를 지나가는 순간 사용할 수가 없어진다.
여기서
1.
#include <iostream>
#include <vector>
using namespace std;
vector<string> makeVec() {
vector<string> vecStr = { "aa", "bb", "cc" };
return vecStr;
}
int main() {
cout << makeVec()[1] << endl;
cout << makeVec().size()<< endl;
return 0;
}
이런 식으로 넘어온 값을 가지고 여러 가지 표현이 가능하다.
그리고
2.
#include <iostream>
#include <vector>
using namespace std;
vector<string> makeVec() {
vector<string> vecStr = { "aa", "bb", "cc" };
return vecStr;
}
int main() {
makeVec() = { "aaa" };
return 0;
}
실제로 주소를 가지고 있기 때문에, 해당 주소에 어떠한 값을 대입할 수도 있다. 다만 해당 라인이 끝나면 수명이 다해 사라지게 된다.
1, 2를 정리해 보면 위를 정리하면
- 실제 메모리상에 주소를 가지고 있기 때문에 값을 대입할 수도 있다.
- 그 값이 가지고 있는 여러 메소드들도 사용이 가능하고, 그 안에 있는 값도 가져 올 수 있다.
xvalue 본인이 고유한 주소를 가지고 있다.
다만 곧 사라질 뿐..
추가로, 고유한 주소를 가지고 있다 보니 이런 괴상한 짓도 가능하다.
#include <iostream>
#include <vector>
using namespace std;
vector<string> makeVec() {
vector<string> vecStr = { "aa", "bb", "cc" };
return vecStr;
}
int main() {
makeVec() = makeVec();
return 0;
}
2번째 특성은 다음 글에서...
2023.05.15 - [C++/기타] - [C++] LValue vs RValue (3)
[C++] LValue vs RValue (3)
2023.05.10 - [C++/기타] - [C++] LValue vs RValue (2) [C++] LValue vs RValue (2) 2023.04.29 - [C++/기타] - [C++] lValue vs rValue (1) [C++] LValue vs RValue (1) 맨 첨에 C를 어정쩡하게 배운 후에 C++ 사용하다 보니 애매하게 이해가
donot-simsim.tistory.com