레퍼런스란?
레퍼런스란 이미 이름이 있는 대상에게 붙여주는 별명이다.
int &ref = val;
val이라는 int형 변수의 이름에 ref라는 별명을 붙인 것이다.
&연산자는 C++에서 레퍼런스를 선언할 때에도 사용된다. C에서는 주소 값을 얻을 때 사용한다.
레퍼런스의 특징
#include <iostream>
using std::cout;
using std::endl;
int main(void) {
int val = 10;
int &ref = val;
val++;
cout << "ref : " << ref << endl;
cout << "val : " << val << endl;
ref++;
cout << "ref : " << ref << endl;
cout << "val : " << val << endl;
return 0;
}
10, 14: 레퍼런스를 조작하든지 변수를 직접 조작하든지 모두 변수의 값이 바뀐다. 즉, 레퍼런스를 가지고 하는 연산은 레퍼런스가 참조하는 변수의 이름을 가지고 하는 연산과 같은 효과를 지닌다.
변수와 레퍼런스의 비교
◇ 변수 선언 과정: 메모리 공간 할당 → 이름 부여
◇ 레퍼런스 선언 과정: 이름부여
레퍼런스 선언이란 이름이 존재하는 메모리 공간에 하나의 이름을 더 부여하는 행위이다.
결국 레퍼런스와 변수는 생성되는 방법에 있어서만 차이를 보일 뿐 일단 만들어지고 나면 완전히 같은 것이다.
레퍼런스를 이용하면 심지어 하나의 메모리 공간에 셋 이상의 이름을 부여할 수도 있다.
레퍼런스의 제약
레퍼런스는 이미 이름을 지니고 있는 메모리 공간에 하나의 이름을 더 부여한다는 특징을 지닌다. 그러므로 아래와 같은 경우는 에러가 발생한다.
int main(void) {
int &ref1;
int &ref2 = 10;
int val = 10;
ref1 = val1;
return 0;
}
2: 선언만 하고 초기화되지 않았으므로 오류이다. 레퍼런스는 선언과 동시에 초기화되어야 한다.
3: 상수는 "이미 이름을 지니고 있는 메모리 공간"이 아니므로 오류이다.
'컴퓨터' 카테고리의 다른 글
2-5 레퍼런스를 이용한 성능의 향상 (0) | 2019.04.06 |
---|---|
2-4. 레퍼런스와 함수 (0) | 2019.04.05 |
1-5. 이름공간(namespace)에 대한 소개 (0) | 2019.04.05 |
1-4. 인-라인(in-line) 함수 (0) | 2019.04.05 |
1-3. 디폴트(Default) 매개 변수 (0) | 2019.04.05 |