• 분류 전체보기
    • 갈무리
    • 씨플플
    • SPRING
    • PI
    • ALGORITHM
    • DIARY
    • (∗❛ᴗ❛∗)
    • (●'◡'●)
    • 민디의 취준일기 (202301~)
  1. [C++] 직접 만드는 std::array 라이브러리 2021.01.18
  2. [C++] 정적바인딩과 동적바인딩 2021.01.11
  3. [C++] template 배열을 참조로 전달 (배열 참조) 2021.01.09
  4. [C++] 클래스, 생성자, 소멸자, this, struct 2021.01.07
[C++] 전위 후위 증감연산자 오버로딩 #씨플플
2021. 1. 14.

210114 목요일 연산자 오버로딩 복습

 

쓸일은 거의 없겠지만

 

#include <iostream>
using namespace std;

int main() {
	
    int num = 5;
	(num++)++;
	++(++num);
    
}

 

겉으로 보기에는 아무 문제 없어보이는 코드이지만 빨간줄이 그이는 코드이다

바로 여기

 

(num++)++;

 

빨간줄에 커서를 올리면 '식이 수정할 수 있는 lvalue 여야 합니다' 라는 툴팁이 뜨고

컴파일 시 '++ 에 lvalue 가 필요합니다' 라는 에러를 볼 수있다.

 

 

결론을 먼저 말하자면

 

증감연산자는 rvalue가 아닌 lvalue를 기준으로 연산을 진행한다.

그래서 증감연산자의 피연산자는 lvalue 여야한다.

 

 

 

... ㅇ3ㅇ

뭔말인지 하나도 모르겠다

우선 lvalue와 rvalue가 뭔지부터 알아야겠다

 

 

lvalue 와 rvalue 에 대한 설명은 여기를 보도록 하자

 

effort4137.tistory.com/entry/Lvalue-Rvalue

 

Lvalue Rvalue

C++ Lvalue와 Rvalue에 대한 오해 Lvalue와 Rvalue는 보통 Left-value(왼쪽값)과 Right-value(오른쪽값)로 풀어서 씁니다. 이 때문에 대입 연산자(=)를 기준으로 왼쪽에 위치하는 값이 Lvalue이고 오른쪽에 위치하.

effort4137.tistory.com

 

 

아래서부턴 내가 나름대로 정리해본것

 

 

 

연산자는 더하기 빼기 나누기 곱하기

피연산자는 연산의 대상이 되는 변수나 상수

 

 

5 + x = 10

 

여기서 연산자는 '+' 이고

피연산자는 5 와 x

 

10은 연산의 결과

 

 

 

 

C++의 연산에서

 

전위증가는 피연산자에 대해 증가연산을 하면서 그 피연산자의 메모리를 참조하는 lvalue를 리턴한다

후위증가는 피연산자에 대해 증가연산을 하면서 증가 연산 진행 전의 rvalue를 리턴한다

 

 

쉽게 말하면 num 을 전위증가 했을때는 num을 참조할 수 있는 레퍼런스를 리턴해주고

num을 후위증가 했을 때는 num에 저장되어있는 숫자값만 달랑 넘겨준다는 것이다

 

 

 

그래서

#include <iostream>
using namespace std;

int main() {
	
    int num = 5;
	++(++num);
    
}
++(++num);

 

괄호 안 ++num 수행 결과

6을 참조하는 lvalue를 리턴해서 그다음 전위증가 연산을 할 수 있다

 

 

#include <iostream>
using namespace std;

int main() {
	
    int num = 5;
	(num++)++;
    
}
(num++)++;

 

괄호 안 num++ 수행 결과로 6이라는 rvalue를 리턴하며

6++; 이라는 코드가 된다.

 

그래서 후위연산자의 피연산자가 lvalue이 아닌 상수(6) 가 되기 때문에 에러가 발생한다.

 

 

증감연산자는 rvalue가 아닌 lvalue를 기준으로 연산을 진행하기 때문에

피연산자는 lvalue 여야 하니까

 

 

그래서 전위연산자, 후위연산자를 오버로딩 할 때 특히 후위연산자를 오버로딩 할때는

함수의 반환형을 const 로 선언해서 반환 시 생성되는 임시객체를 const 객체로 만든다. (상수화)

 

 

 

 

 

티스토리툴바