728x90

참조형 변수는 변수를 복사하지 않고 직접 객체를 이용합니다. 참조형 변수는 자신이 참조하는 변수의 별명이라고도 합니다.

 

참조형 변수의 선언은 아래와 같이 합니다. &를 포함한 자료형을 가진 변수를 선언하여 기존의 변수를 참조합니다.

int value = 5;
int& ref_value = value;

참조형 변수를 선언할 때 주의사항은 아래와 같습니다.

  • 상수값을 참조할 수 없습니다.
  • 선언과 동시에 참조를 해줘야 합니다.
  • NULL 값을 참조할 수 없습니다.
int& err_ref1 = 3;	// error C2440: '초기화 중': 'int'에서 'int &'(으)로 변환할 수 없습니다.
int& err_ref2;		// error C2530: 'err_ref2': 참조를 초기화해야 합니다.
int& err_ref3 = NULL;	// error C2440: '초기화 중': 'int'에서 'int &'(으)로 변환할 수 없습니다.

참조형 변수로 변수를 참조하게 되면 두 변수의 값은 동일하게 됩니다.

#include <iostream>

using namespace std;

int main()
{
	int value = 5;
	int& ref_value = value;

	cout << "value = " << value << " ref_value = " << ref_value << endl;
	value++;
	cout << "value = " << value << " ref_value = " << ref_value << endl;
	ref_value++;
	cout << "value = " << value << " ref_value = " << ref_value << endl;
}

/*
실행결과
value = 5 ref_value = 5
value = 6 ref_value = 6
value = 7 ref_value = 7
*/

참조자를 사용하여 함수의 매개변수를 통해 전달할 때 call-by-reference(참조에 의한 호출)을 사용할 수 있습니다. 이때 참조형 변수를 매개변수로 사용하면 값을 그대로 전달하지 않고 주소만 전달하게 되어 더욱 효율적이게 됩니다.

 

아래 그림은 call-by-value와 call-by-reference의 이해를 돕기 위한 그림입니다. 

출처 : 땔감툰님(https://pubul.tistory.com/166)

#include <iostream>

using namespace std;

void swap_ref(int& ref_x, int& ref_y)
{
	int tmp;
	tmp = ref_x;
	ref_x = ref_y;
	ref_y = tmp;
}
void swap_value(int val_x, int val_y)
{
	int tmp;
	tmp = val_x;
	val_x = val_y;
	val_y = tmp;
}

int main()
{
	int x = 5;
	int y = 7;

	cout << "x = " << x << " y = " << y << endl;
	swap_value(x, y);
	cout << "x = " << x << " y = " << y << endl;
	swap_ref(x, y);
	cout << "x = " << x << " y = " << y << endl;
}

/*
실행결과
x = 5 y = 7
x = 5 y = 7
x = 7 y = 5
*/
728x90

'Programming > C++' 카테고리의 다른 글

C++ 오버로딩과 오버라이딩  (0) 2020.02.06
C++ 디폴트 매개변수  (0) 2020.02.06
C++ new, delete  (0) 2020.01.20
C++11 decltype  (0) 2020.01.20
C++11 auto  (0) 2020.01.14

+ Recent posts