전위형과 후위형을 함수로 구현한다면 이렇게됨
후위형은 먼저 연산을 하고 값이 증가됨
그러니까 임시변수를 선언해서 임시변수에 값을 대입시켜놓고 실질적으로 값은 증가시켜놓으면 된다. 그러고 임시변수를 반환시키면 된다.
전위형은 값이 증가되고 연산을 하므로, 실질적으로 증가를 시키고 그대로 반환을시키면 된다.
둘의 결정적인 차이는 "후위형은 임시변수를 하나 선언한다" 이고 즉, 이말은 전위형은 작업을 한번만하고 후위형은 작업을 두번을한다(메모리 추가소모) 라는소리이다. 그러니까, 단순증감일 경우에는 전위형을 사용하는것이 메모리낭비를 하지않는 방법이다.
하지만 완벽하지는 않은것이, 구현한 함수대로 동작을 하는 원리라면, 주석처리한 부분과 결과가 동일해야하지만 동일하지가 않다. 이부분에 대해서는 아직도 미스터리.
추가로, (i++ + i++) + ++i 와 i++ + i++ + ++i 의 차이도 모르겠다.
후위형은 먼저 연산을 하고 값이 증가됨
그러니까 임시변수를 선언해서 임시변수에 값을 대입시켜놓고 실질적으로 값은 증가시켜놓으면 된다. 그러고 임시변수를 반환시키면 된다.
전위형은 값이 증가되고 연산을 하므로, 실질적으로 증가를 시키고 그대로 반환을시키면 된다.
둘의 결정적인 차이는 "후위형은 임시변수를 하나 선언한다" 이고 즉, 이말은 전위형은 작업을 한번만하고 후위형은 작업을 두번을한다(메모리 추가소모) 라는소리이다. 그러니까, 단순증감일 경우에는 전위형을 사용하는것이 메모리낭비를 하지않는 방법이다.
#include <stdio.h>
int& fPlus(int& i)
{
i = i+1;
return i;
}
int lPlus(int& i)
{
int temp=i;
i = i+1;
return temp;
}
int main(void)
{
int a=0, i=1;
a = fPlus(i);
printf("a = %d\t i = %d\n",a,i);
i = 0;
a = lPlus(i);
printf("a = %d\t i = %d\n",a,i);
a = 0;
i = 0;
a = lPlus(i);
//a = i++ + i++; 그렇다면 이것과의 차이는????
printf("a = %d\t i = %d\n",a,i);
return 0;
}
하지만 완벽하지는 않은것이, 구현한 함수대로 동작을 하는 원리라면, 주석처리한 부분과 결과가 동일해야하지만 동일하지가 않다. 이부분에 대해서는 아직도 미스터리.
추가로, (i++ + i++) + ++i 와 i++ + i++ + ++i 의 차이도 모르겠다.
'프로그래밍 > 공부' 카테고리의 다른 글
[자료구조] 트리, 그래프 (0) | 2022.07.23 |
---|---|
Effective C++ [4] 설계 및 선언 (0) | 2015.07.10 |
Effective C++ [3] 자원관리 (0) | 2015.07.09 |
Effective C++ [2] 생성자, 소멸자 및 대입 연산자 (0) | 2015.07.08 |
Effective C++ [1] C++에 왔으면 C++의 법을 따릅시다 (0) | 2015.07.08 |