참조자는 NULL값을 저장하지 못한다.
포인터는 NULL값을 저장할 수 있다.
int a = 3;
int & aa = a; // 주소를 참조
//const int aa2 = a; //값을 복사
int b = 1;
int & aa = b;
a = b; // a 가 b 로 대체됨. <= 이게 포인터랑 다른점
이때, const 를 안바꾸면 aa를 바꿀때 a도 같이 바뀐다.
여기서 포인터와 내부적으로 다른점은 주소값을 대하는 방식에 있다.
먼저 포인터의 경우
int a = 3;
int *aa = &a;
int b = 1;
a = b;
cout << &aa << endl; // 1 이 나옴
위 코드에서 내부적으로는
const 를 붙이면, 아예 두개를 별개로 보겠다는 것.
만약, 참조하고 있는 수를 바꾸려면 aa2 처럼 값을 복사해서 쓰면 편하긴 하지만, 성능면에서 떨어짐. 모든 복사는 성능이 떨어진다고 봐야한다.