C++ 반환형 int& 와 int의 차이점이 무엇인가요??
글쓴이: sungsoo1214 / 작성시간: 화, 2013/03/05 - 11:46오전
int increment(int& n);
int main()
{
int num=0;
cout<<"num= "<
return 0;
}
int increment(int& n)
{
++n;
return n;
}
다음에서 increment 함수부분에 반환형을 int -> int&로 했을 때에 어떤 차이가 있나요??
결과는 같게 나오는데 차이를 모르겠습니다.
Forums:
다시 수정하겠습니다;;
increment 함수에서 반환형을 int 대신에 int&로 하면 어떤 차이가 있는지 모르겠습니다. 결과는 똑같이 나오는데 차이점을 모르겠네요..
#include "stdafx.h" #include
#include "stdafx.h"
#include
using namespace std;
int increment(int& n);
int increment2(int n);
int& increment3(int& n);
int _tmain(int argc, _TCHAR* argv[])
{
int num=0;
cout << "num= " << increment(num) << endl;
cout << num << endl;
cout << "num= " << increment2(num) << endl;
cout << num << endl;
cout << "num= " << increment3(num) << endl;
cout << num << endl;
getchar();
return 0;
}
int increment(int& n)
{
++n;
return n;
}
int increment2(int n)
{
++n;
return n;
}
int& increment3(int& n)
{
++n;
return n;
}
위 코드를 실행해보시면 감이 오실겁니다.
&는 레퍼런스라서 주소값을 넘기고 int는 걍 값을 넘기는 거구요.
call by value, call by reference. 찾아보시면 도움이 될듯 합니다 ;)
질문자는 답변자님이 말씀해주신거중에 1과 3의 차이에 대해 질문하는것같아요
&는 레퍼런스라서 주소값을 넘긴다는 표현보다는..
별칭을 주어준다라고 말해주는게 좋을것같아요
다르게 설명해보자면 main의 num을
increment내에서 n이라는 별칭을가진놈으로 사용하겠다고 선언하고
전위 증가연산자를 통해 값을 늘리고
그 값을 새로 int형으로 반환합니다.
그대로 반환하지 않고 그값을 수정하여 return n+1;으로 반환할수도 있습니다.
"increment의 반환형 int"로 반환하는거니까요
하지만 increment3는
n이라는 별칭을가진놈으로 사용하겠다고 선언하고
전위 증가연산자를 통해 값을 늘린것까진 같지만
반환을 int가 아니라 int의 별칭을 가진놈을 반환해야하므로
return n+1; 이런식으로 반환할수 없습니다.
int 함수내에서 return n;은 n의 '값'을 반환하겠다는 뜻이지만
int& 함수내에서 return n;은 n이라는 별칭을 가진 '변수'를 반환하겠다는 뜻이고
int& 함수내에서 n+1는 n의값에 1을 더한 '값'이 되어버리기때문입니다.
여기까지는 질문하신것을 그대로 설명해드렸는데
처음부터 드리고싶었던말은
레퍼런스를 사용하실꺼면 그냥
int increment(int& n);
int main()
{
int num=0;
increment(num);
cout<<"num= "<< num << return 0;
}
void increment(int& n)
{
++n;
}
이렇게 쓰실수도 있습니다
댓글 달기