우선 제가 열혈강의 교재에서
"레퍼런스는 반드시 선언과 동시에 초기화 되어야 한다"라고 써 있는 것을 봤는데요
아래처럼 소스를 작성하는데
역시나 int &ref=val; 부분을 int &ref; ref=val;로 바꾸면 컴파일이 않되더군요.
#include <iostream>
#include <stdio.h>
using std::cout;
using std::endl;
int main()
{
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;
}
생성자에서 레퍼런스를 사용해서 초기화 리스트를 작성한다면
아래의 소스와 같더라구요.
#include <iostream>
class Some
{
public:
int &ri;//레퍼런스 선언만 있음,초기화X
Some(int &i) : ri(i) { }
void OutValue() { printf("%d\n",ri); }
};
void main()
{
int i=5;
Some S(i);
S.OutValue();
}
그런데 이 소스코드에서 레퍼런스가 선언과 동시에 초기화 되어있지 않은데도
실제 컴파일하면 에러가 없는데요.
그런데 어째서 생성자에서만 레퍼런스를 초기화 없이 선언만 해서 사용할 수 있나요?
그리고 생성자 이외에 C++에서 레퍼런스를 선언만해서 나중에 변수를 대입해서 사용할 수 있는 부분이 또 있는지 알고 싶네요.