레퍼런스 자료형

-> C++부터 등장한 자료형

-> 원본 데이터에 접근하는 두 번째 방법이다.

-> 첫 번째 방법으로는 포인터를 통한 간접 참조를 이용하고,

-> 두 번째 방법으로는 레퍼런스를 통한 직접 참조를 이용한다.

 

레퍼런스의 형태

레퍼런스로  한번 참조한 메모리는 변경이 불가능하다.

-> 선언과 동시에 초기화를 진행해야만 한다.

자료형& 변수명
int a = 10;
int& r = a;

 

레퍼런스를 이용한 swap

void Swap(int& _a, int& _b)
{
	int itemp = 0;
	itemp = _a;
	_a = _b;
	_b = itemp;	
}

void main()
{
	int a = 10, b = 20;
	Swap(a, b);
	cout << a << " , " << b << endl;
}

 

const와 레퍼런스

-> 컴퓨터가 변수를 다룰 때는 단순히 자료형만 보고 판단한다.

const int a = 10;

 

const int   a = 10;
int&	    r = a;

 

r의 자료형은 일반 레퍼런스이다.

-> r을 통해서 값 변경을 한다.

-> 하지만, 참조하고 있는 공간은 값 변경이 불가능한 const 변수이다.

int& r = 20; // 불가능

 

20은 리터럴 상수이므로 임시 메모리 영역이 등록이 된다.

(코드라인을 벗어나면 소멸하는 공간)

 

문법 이론상 성립하지 않는다.

하지만, C++에서는 성립할 수 있도록 "임시 변수"를 생성해준다.

 

임시 변수란 "이름 없이 메모리 공간에 등록되는 변수"이다.

const int& r = 20;	// 가능

이것을 통해서 값 변경을 시도해보자.

void Add(const int& _a, const int& _b)
{
	int iRes = _a + _b;

	cout << iRes << endl;

}

void main()
{
	Add(10, 20);
}

 

레퍼런스의 크기

-> 레퍼런스 변수를 만들기 위해 공간을 할당하지 않는다.

-> 즉, 레퍼런스의 크기는 존재하지 않는다.

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

C++ Debug, 조건식 Debug  (0) 2020.09.08
C++ string  (0) 2020.09.08
C++ 파일 분할(.cpp, .h)  (0) 2020.09.08
C++ 조건부 컴파일(#if, #ifdef, #ifndef 등)  (0) 2020.09.07
C++ 매크로(#define)  (0) 2020.09.07

+ Recent posts