게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
생성자 선언시 레퍼런스형은 초기화 할 필요가 없나요?
게시물ID : programmer_11274짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 280회
댓글수 : 2개
등록시간 : 2015/06/15 12:56:33
우선 제가 열혈강의 교재에서
"레퍼런스는 반드시 선언과 동시에 초기화 되어야 한다"라고 써 있는 것을 봤는데요
아래처럼 소스를 작성하는데
역시나 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++에서 레퍼런스를 선언만해서 나중에 변수를 대입해서 사용할 수 있는 부분이 또 있는지 알고 싶네요.


전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호