- 좋은 개발자
- emplace_back
- postman html parse
- Intellij
- postman session
- solidity
- LSL_Script
- web developer
- C++
- oracle
- 우수한 프런트 개발자
- Front-end developer
- postman csv
- c#
- Java
- 다빈치 리졸브
- postman tests
- Unity
- postman pre-request
- Android/iOS Developer
- MFC
- postman automations
- postman excel
- postman collection
- postman
- Interaction developer
- UI/UX Engineer
- Android
- 프런트엔드
- postman collection variables
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Today
- Total
david's daily developer note
[C,C++] lvalue, rvalue 본문
Lvalues, rvalue..
내가 컴퓨터 언어론을 배웠던 호랑이 담배피던 그 시절.
구구단 프로그램 만들면서 성취감을 느끼던 그 시절
나는 대입연산자를 기준으로 좌측에 있으면 lvalue, 우측에 있다면 rvalue라고 배웠다.
정말 배운건지, 그 정도로만 이해하고 무시했는지는 정확하지 않다.
나는 평소에도 읽었던 전공서적을 틈틈히 다시보는 습관이 있는데(최근에는 그럴 시간이 없다. 할 수 있을때 많이하자...),
Effective Modern c++, Effective C++등의 책을 보면, 항상 서두에 중요한 개념이라면서
lvalue, rvalue의 정의가 나온다. 그런데, 세월이 지날수록 이 놈들을 설명하는 글들이 길어지고 있다.
개념이 점차 모호해 지고 있기 때문이다.
더욱 정확하게 말하면 C++버전이 올라갈수록 즐거운 개념들이 추가되고 있고,
기존에 단순한 개념이 함게 복잡해지는 것이겠다.
시간이 더 지나면 양자역학 수준이 될 것같아서 한번 잡고 가려한다.
lvalue, rvalue 개념 정리에 도움이 되는 유용한 설명글을 소개한다.
"일반적으로, 주소를 취할 수 있다면 왼값이고, 취할 수 없다면 오른값이다."
표현식을 기준으로 lvalue 혹은 rvalue로 한가지로 정의할 수 없다는 것을 말하고 있다.
즉, lvalue와 rvalue는 표현식과는 무관하고 어떤 형식이던 lvalue이거나 rvalue가 될 수 있다는 것이다.
그리고 그 와중에, 주소를 취할 수 있다는 기준으로 lvalue를 정의할 수 있다고 한다.
처음에는 아리송했지만, 이해를 하기 위한 다양한 접근 방법들을(수 많은 블로그, 문서 등..) 반복적으로 보다보니,
저 문장이 짧고 간결하고 핵심적인것 같다!
class test
{
public:
test( test&& rhs);
};
test클래스 이동생성자의 매개변수 형식은 rvalue참조이다.
매개변수의 형식은 분명 rvalue이지만, rhs 매개변수 자체는 생성자 범위내에서
주소로 참조가능한 lvalue이다.
(rhs는 이동,복사생성자 매개변수 이름으로 자주쓰이며 "right-hand side(우변)"의미이다)
상기 예를 통하여 모든 형식 T는 표현식과 무관하게 l,rvalue가 될 수 있다는 것을 알 수있고,
주소를 취할 수 있는가의 여부로 lvalue를 판단할 수 있다는 점도 알 수 있다.
더 많은 예제를 올리고 싶지만,
저 개념을 생각하고 lvalue, rvalue에 대한 글들을 찾아보기 바란다.
참고1. Effiective Moden C++
참고2. http://jeremyko.blogspot.kr/2012/08/lvalue-rvalue.html (필자의 이해하려는 노력이 정말 대단해 보인다!)
'[Develop] Native > C++ , C' 카테고리의 다른 글
[C,C++] STL Container Reserve (0) | 2018.05.28 |
---|---|
[C,C++] emplace_back (0) | 2018.05.28 |
[C,C++] Variadic Template (0) | 2018.05.17 |
[C,C++] 실행파일이 만들어지는 단계 (0) | 2018.05.17 |
[C,C++] 디버깅++ (0) | 2012.03.06 |