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의 이해를 돕기 위한 그림입니다.
#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 |