c++/c 언어 기반의 c++ 2

[C++] 참조자와 함수(Call by Reference), const 참조자

TIM_0529 2022. 12. 29. 03:06
반응형

함수의 호출 방식에는 두 가지가 있다.

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