반응형
함수의 호출 방식에는 두 가지가 있다.
Call - by - value 값을 인자로 전달하는 함수의 호출방식
Call - by - refence 주소값을 인자로 전달하는 함수의 호출방식
Call - by - value에 대해서는 딱히 이야기할 게 없기 때문에
Call - by - refence 에 대해서 이야기하겠습니다.
흔히 참조에 의한 호출에 대해서 이야기할 때 Swap 함수를 예로 들곤 한다.
void SwapRef(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 10;
int b = 5;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
SwapRef(&a, &b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
다음은 참조자만을 사용해서 Swap 하는 코드이다.
void SwapByRef(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
이렇든 참조자를 사용하면 다른 함수에서 값을 변경할 수 있다.
하지만 참조자에 단점이 여기서 생긴다.
다음 코드를 보자
int num = 24;
RefFunc(num);
C++ 관점에서 본다면 num이 어떤 값인지 알 수 없다.
만약
void RefFunc(int num); 이렇게 정의되었다면 우리는 num 이 24 로 그대로 유지가 된다고 생각할 수 있다.
하지만
void RefFunc(int &num); 이렇게 정의 되었다면 어떤 값으로 변경이 될지 모른다.
이러한 단점을 보완하기 위해 const 참조자를 사용할 수 있다.
void RefFunc(const int &num); 이 함수의 의미는 num의 값을 변경하지 않겠다는 것이다.
반응형
'c++ > c 언어 기반의 c++ 2' 카테고리의 다른 글
[C++] 키워드 const의 의미 (0) | 2022.12.29 |
---|---|
[C++] & 참조자 (Reference)의 이해 (0) | 2022.12.29 |