int a=5;
++a=a;
위의 코드 세그먼트를 찾으십시오. 이 코드는 C++ (g ++) 컴파일러에서는 문제가 없지만 c (gcc) 컴파일러에서는 오류가 발생합니다. 이 이유를 알 수 있습니까? c 컴파일러의 오류는 "할당의 왼쪽 피연산자로 왼쪽 값이 필요합니다"입니다.C 컴파일러에서 오류가 있지만 C++ 컴파일러에서 오류가 발생했습니다.
int a=5;
++a=a;
위의 코드 세그먼트를 찾으십시오. 이 코드는 C++ (g ++) 컴파일러에서는 문제가 없지만 c (gcc) 컴파일러에서는 오류가 발생합니다. 이 이유를 알 수 있습니까? c 컴파일러의 오류는 "할당의 왼쪽 피연산자로 왼쪽 값이 필요합니다"입니다.C 컴파일러에서 오류가 있지만 C++ 컴파일러에서 오류가 발생했습니다.
C++에서 연산자 오버로드가 발생합니다 (사전 확장도 오버로드 할 수 있음). 따라서 사전 추가 연산자가 C++에서 lvalue를 반환합니다. 예를 들어
:
일부 포인터 기능을 구현할 수 있고,해야 할 수도 클래스 :
이 경우 사전 증가가 유용 할 수 있습니다.
추상 코드 예제 :
class MyIntPtr {
int *val;
...
public:
MyIntPtr(int *p) { ... };
MyIntPtr &operator++() { ++val; return *this; };
void operator=(int i) { *val = i; }
...
};
...
int array[10];
MyIntPtr ptr(array);
for(int i = 0; i < sizeof array; ++i)
++ptr = i;
C++에서 A는 값이 아닌 변수를 참조하지 않도록에 대한 C++ – bikram990
관련 : http://stackoverflow.com/questions/3690141/multiple-preincrement -opera-on-a-cc에서 가변 –