2010-01-10 2 views
29
  1. 리터럴 문자열이 lvalue 또는 rvalue인지 궁금합니다. 다른 리터럴 (int, float, char 등)은 lvalue 또는 rvalue입니까?리터럴 문자열 및 함수 반환 값은 lvalues ​​또는 rvalues입니까?

  2. 함수의 반환 값이 lvalue 또는 rvalue입니까?

어떻게 차이점을 알 수 있습니까?

+1

"lvalue"및 "rvalue"로 무엇을 의미하는지 모르겠습니다. 이 값이 운영자의 왼쪽 또는 오른쪽에있을 수 있다는 것을 의미합니까? 그렇다면 모든 비 const 변수에 쓸 수 있기 때문에 질문을 구체화해야합니다. 함수의 반환 값은 const입니다. – Gaim

+11

@Gaim : lvalue와 rvalue는 특별한 의미를 갖는 일반적인 용어입니다. – jamesdlin

+0

@Gaim : lvalue 및 rvalue는 컴파일러 및 languag 사양 수준입니다. 이 경우에는 C의 구문을 참조합니다. – Pod

답변

40
  1. 문자열 리터럴은 lvalues,하지만 당신은 그들에게
  2. 를 rvalue를 변경할 수 있지만, 포인터와 비 NULL의 경우, 오브젝트는이에이 좌변

C 표준입니다 포인트 원래 용어가 이고, 나머지는이고 은 이고, L = R과 같습니다. 그러나 lvalue를 로케이터 값으로 생각한다고 말합니다. 대략적으로는 객체의 주소를 가져올 수 있으므로 해당 객체에 위치가 있음을 의미합니다. (C99의 6.3.2.1을 참조하십시오.)

동일한 토큰으로, 표준에서는 rvalue라는 용어를 포기하고 int, chars 등의 리터럴을 포함한 거의 모든 "표현식의 값"을 사용합니다. 또한, 당신이 rvalue로 할 수있는 일은 lvalue로 할 수 있으므로, 모든 lvalues를 rvalues로 생각할 수 있습니다.

+2

+1 짧고 정답. 나는 C 표준이 "rvalue"를 아무 데서도 사용하지 않는다는 것을 알지 못했지만 실제로는 그럴 것입니다 (단지 검색을했습니다!). C++의 또 다른 흥미로운 차이점. 또 다른 하나는 언젠가 넘어갔습니다. 함수 지정자는 C에서 rvalues ​​인 반면, C++에서는 lvalues입니다. 그래서 C에서'op &'는 함수를 지정하는 값들에 적용될 수 있습니다. –

+1

인덱스에서 rvalue를 사용합니다. : P –

+0

@ 로저 : 고마워! 문자열 리터럴 이외의 다른 리터럴에 대해서 궁금합니다. @ 요한네스 : 나는 방금 기능 desinators가 어제 어제 어제 온라인이었던 것을보고, 그것이 C를 기억하고 있었다.내가 잘못? – Tim

1

Microsoft의 C++에는 definition이 있습니다. 이 정의에 따르면 "hello world"와 같은 리터럴 문자열은 const가 아닌 임시이므로 lvalue입니다. 실제로 응용 프로그램의 수명 기간 동안 지속됩니다.

4

C의 표현식에는 두 가지 종류가 있습니다. 1. lvalue : lvalue 인 표현식은 할당의 왼쪽 또는 오른쪽으로 나타날 수 있습니다. 2. rvalue : rvalue 인 표현식은 할당의 오른쪽에 있지만 왼쪽에 표시되지 않을 수 있습니다. 변수는 lvalues이므로 할당의 왼쪽에 나타날 수 있습니다. 숫자 리터럴은 rvalues이므로 할당 할 수 없으며 왼쪽에 표시 할 수 없습니다. 유효한 진술은 다음과 같습니다. int g = 20; 그러나 다음은 유효한 명령문이 아니며 컴파일 타임 오류가 발생합니다. 10 = 20;

+1

니스 설명. – Shinchan