포인터와 참조자의 차이점은 포인터는 NULL이 될 수 있지만 참조자는 존재하는 것만 지정 가능
int a = 3;
int &ref_a = a;
ref_a = 4;
std::cout << "a : " << a << std::endl;
std::cout << "ref_a : " << ref_a << std::endl;위 코드 실행의 결과는
a : 4
ref_a : 4
int &ref_a = a의 뜻은 ref_a는 a의 참조자임을 알 수 있음
→ ref_a는 a의 또다른 이름임
한번 선언된 참조자를 다른 객체를 가리키도록 할 수 없음
lvalue 참조자
주로 함수 파라미터의 자료형을 참조자로 하여 객체 복사 없이 사용할 수 있다.
const로 lvalue 참조자를 정의한 경우 리터럴 대입 (임시 객체 사용)이 가능하다
const int& r1 = 1; // ok
int& r2 =1 // errorvoid func_ref(int& n) {}
void func_const_ref(const int& n) {}
int n = 1;
func_ref(n); // ok
func_const_ref // ok
func_ref(1); // error
func_const_ref(1); // ok