반응형

레퍼런스를 리턴하는 함수의 정의

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
int &increment(int &val)
{
 val++;
 return val;
}
 
int main(void)
{
 
 int n = 10;
 int &ref=increment(n);
 
 cout<<"n : "<<n<<endl;
 cout<<"ref : "<<ref<<endl;
 
 return 0;
 
}
 
// n == val == ref
// 그러나 increment함수가 종료되면 val참조는 사라진다.
// 결국 n == ref만 남는다.
 
Crocus

 

**중요**

 

int &increment에서 &가 없다면?

 

int형으로 리턴중인데  

 

int &ref = 11 이라는 결과가 나오게 된다.

 

여기서 오류가 나는것은 상수는 참조(&ref)할 수 없다는 것이다.

 

따라서 &를 붙이거나 아니면 &increment의 &와 int &ref에서 &를 없애면

 

작동이 제대로 될 것이다.

 

 

****제대로 이해하고 넘어가기****

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
int &function(void)
{
 
 int val= 10;
 return val;
 
}
 
int main(void)
{
 
 int &ref=function();
 cout<<ref<<endl;
 return 0;
 
}
Crocus

 

// 이 소스의 잘못된 점은

// 정상적인것 같아 보이나 함수호출 뒤 return val을 해 주지만

// 이미 val = 10; 이라는 값이 사라지기 때문에 

// int &ref = function();으로 돌아올 때 값을 받지 못하게 된다.

// 출력이 제대로 되는 코딩이어도 문제가 되는 코딩이다.

반응형