L-VALUE 와 R-VALUE

킴스코딩클럽·2022년 9월 22일
1

CS기초 시리즈

목록 보기
15/71
int array1[3]{1,2,3}; //깊이의 기능을 포함
	int array[3]{};

	array2 = array1; 
	// array2에 array1의 원소들을 대입하겠다 - 에러 왜?
	//식이 수정할 수 있는 l-value 여야 합니다.

연산자를 기준으로
왼쪽은 L-VALUE(leftvalue)
오른쪽은 R-VALUE(right value)

L VALUE
객체(object-타입을가지고 이름이 붙은),
한줄의 코드를 넘어서도 지속되는 객체
변수(이름을 붙여놓음)

R VALUE
일반적인 값(VALUE)
현재 코드에서만 유지되는 값
이름이 붙어잇지 않아 접근가능한 방법이 없음
리터럴, 이름없는 객체

 int x ;
 
x =3; 
// =연산자의 의미는 왼쪽 피연산자에 오른쪽 피연산자를 대입한다는 뜻 

3=x; 
// 안됨 l-value가 3일까??????

int y;

y=x; // 에러 안남

X+3 // +연산자는 둘다 RVALUE를 원하기 때문에 문제 없음
X=3 // =연산자는 RVALUE와 LVALUE를 원하기 때문
int x = 3+4; 
 이름없는 객체가 3가지 등장함 3은 실제 저장될때 int 3
 하지만 int 3은 이름이 없으므로 다음줄에서 접근가능하지 않음 이것이 rvalue
 int 3int 4 그리고 이 식을 게산한 결과가 이름없는 객체로 저장되는 것
int x{1};
int y{2};

x=y; 
// 둘다 l value r value 로 바꾸기 가능함
lvalue는 rvalue로 치환가능함(안에 있는 값을 꺼내와서 값처럼 만들 수 있음)
2=x; // 불가능 이름이 없으므로 값을 꺼내올 수 없음
___

 ``` cpp
int array1[3]{1,2,3}; //깊이의 기능을 포함
	int array[3]{};

	array2 = array1; 
	// array2에 array1의 원소들을 대입하겠다 - 에러 왜?
	//식이 수정할 수 있는 l-value 이어야함

= 연산자의 의미는 왼쪽에 l value가 나와야함
그런데 l value가 없다는 뜻 = array2는 l value가 아니라는 뜻임
왜 l value가 아닐까?
l value의 조건 중 하나는 변수 그럼 배열은 변수가 아닐까?????


배열은 인덱스가 붙어야 의미를 가짐 배열이름 자체는 아무 기능 없음

for(int i =0;i<3;I++)
array2[i] = array1[i]
profile
공부 기록용

0개의 댓글