L-Value는 간단히 말하자면 식별 가능한(즉, 주소가 있는) 메모리에 위치한 객체이다.
1. 모든 구문에서 할당되었을 때, "L-Value"는 반드시 데이터를 저장할 수 있는 기능을 가져야 한다.
2. L-Value는 반드시 함수나, 식 ( a+b와 같은), 상수 ( 3, 4, 등등)가 될 수 없다.
L - Value :
L - Value는 객체를 식별하는 메모리 위치를 말한다.
L - Value는 대입 연산자 (=) 의 오른쪽 또는 왼쪽에 나타낼 수 있다.
+임시 변수 = R-Value
C++는 실제 매개변수와 참조 매개변수가 일치하지 않을 때 임시 변수를 생성할 수 있다.
죄근의 C++는 매개변수가 const 참조일 경우에만 이것을 허용한다. 이것은 새로운 제약이다.
C++가 어떤 경우에 임시 변수를 생성하는지, 그리고 const 참조의 경우에만 임시 변수를 생성을 허용하는 이유는
다음과 같다.
먼저, 임시 변수는 언제 생성되는 것인가?
참조 매개변수가 const일 경우, 컴파일러는 다음과 같은 두 가지 상황에서 임시 변수를 생성한다.
1. 실제 매개변수가 올바른 데이터형이지만 lvalue가 아닐 때 2. 실제 매개변수가 잘못된 데이터형이지만 올바른 데이터형으로 변환할 수 있을 때 |
rvalue를 참조는,
rvalue를 참조할 때 사용할 수 있으며 &&를 사용하여 선언한다.
그렇다면 다시 lvalue란 그렇다면 무엇일까?
lvalue 매개변수는 참조가 가능한 데이터 객체이다. 예를 들어
변수, 배열의 원소, 구조체의 멤버, 참조 또는 역참조 포인터는 lvalue이다.
위에서 말했다 싶이, 일반적인 상수 (ex. 1, 2, 3, ... 등등 주소에 의해 표시되는 인용 구문과는 별개로)와
여러 개의 항으로 이루어진 표현식은 lvalue가 아니다.
위에서 말한 C++의 L-Value와 달리,
C에서는 본래 대입 연산자(=)를 기준으로 왼쪽과 오른쪽에 모두 사용될 수 있는 값은 L-Value이고,
오른쪽에만 사용될 수 있는 값이 R-Value라고 정의되어 있다.
그러나 이러한 정의는 const 변수가 소개되기 전의 일이다.
지금은 우리가 사용하는 C++에서는
일반 변수와 const 변수 모두 주소에 의해 접근이 가능하기 때문에 lvalue로 고려될 수 있다.
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
생성자를 통한 자동 형변환, 변환 함수 (0) | 2023.03.02 |
---|---|
분할 컴파일 (0) | 2023.02.21 |
C++ 파일 입출력 (0) | 2023.02.11 |
vector 와 array (0) | 2023.02.08 |
Generic & Function Overload (0) | 2023.02.07 |