int* q= &(x++); 는 왜 에러가 발생하나요?
글쓴이: Raewoo / 작성시간: 수, 2013/01/16 - 3:45오후
[1]의 아래 예제의 int* q= &(x++);에서 왜 에러가 발생하는지 알고 싶습니다. x++는 왜 좌변값이 아닌가요?
#include
using namespace std;
void f(int x, int y)
{
int j=x=y; // x=y의 값은 대입 연산 후에 x에 대입된 값이다.
int* p= &++x; // p는 x를 가리킨다.
int* q= &(x++); // 에러: x++는 좌변값이 아니다. (x에 저장된 값이 아니다)
int* pp= &(x>y?x:y); // 둘 중에 큰 int 변수의 주소
}
int main(void)
{
f(1,2);
return 0;
}
참고 문헌:
[1] 비야네 스트롭스트룹 저, 곽용재 역, C++ 프로그래밍 언어 (특별판), ch.6.2.1, p. 195, ISBN 9788945072047. (http://kangcom.com/sub/view.asp?sku=200505090002)
[2] 좌변값 (http://www.ktword.co.kr/abbr_view.php?id=501&m_temp1=2677&nav=1)
Forums:
gilgil.net
흥미로운 얘기네요. 직접 컴파일하니 에러가 뜨는군요.
pseudo code를 써 보자면 다음과 같습니다.
++x : x를 증가시키고 x 그 자체가 반환된다.
x++ : x의 복사 객체가 반환된다.
에서는 x의 복사 객체는 순식간(?)에 소멸되기 때문에 복사 객체의 포인터는 존재하지 않다고 보는 겁니다.
www.gilgil.net
달아주신 댓글을 보고 이해하였습니다.
.
달아주신 댓글을 보고 이해하였습니다.
달아주신 댓글을 보고 이해하였습니다. 감사합니다.
같은 설명이지만 [1]의 6.2.5 절에서 다음과 같은 구절도 찾아 볼 수 있었습니다.
"/*...*/ 반면, x++의 결과는 조금 주의해야 한다. 이 값은 증가되기 전의 x 그대로이다. 예를 들어 y=x++는 x와 같은 타입의 변수 t를 도입해서 다시 쓰면 y=(t=x,x+=1,t)와 같다."
[1] 책에 설명 외에도, 표준안에 따르면
[1] 책에 설명 외에도, 표준안에 따르면 prefix increment의 결과는 lvalue이고, postfix increment의 결과는 prvalue라고 합니다.
(http://stackoverflow.com/questions/3572753/difference-between-cs-expression-and-cs-expression)
그리고 C에서는 둘 다 lvalue가 아니라서, &(++x) 하고 &(x++) 모두 에러가 발생하네요.
/*** Signature ******************
* blog: http://blog.bluekyu.me/ *
********************************/
댓글 달기