우선 제가 열혈강의 교재에서 <div>"레퍼런스는 반드시 선언과 동시에 초기화 되어야 한다"라고 써 있는 것을 봤는데요</div> <div>아래처럼 소스를 작성하는데</div> <div><span style="font-size:9pt;line-height:1.5;">역시나</span><b style="font-size:9pt;line-height:1.5;"> int &ref<span style="font-size:9pt;line-height:1.5;">=val; 부분을 </span></b><b style="font-size:9pt;line-height:1.5;">int &ref; ref</b><b style="font-size:9pt;line-height:1.5;"><span style="font-size:9pt;line-height:1.5;">=val;로 바꾸면 컴파일이 않되더군요.</span></b></div> <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">#include <iostream></span></div> <div><div>#include <stdio.h></div> <div><br></div> <div><br></div> <div>using std::cout;</div> <div>using std::endl;</div> <div><br></div> <div>int main()</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int val=10;</div> <div><b><span class="Apple-tab-span" style="white-space:pre;"> </span>int &ref<span style="font-size:9pt;line-height:1.5;">=val; //레퍼런스 선언과 동시에 초기화</span></b></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>val++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cout<<"ref : "<<ref<<endl;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cout<<"val : "<<val<<endl;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>ref++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cout<<"ref : "<<ref<<endl;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cout<<"val : "<<val<<endl;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div>}</div></div> <div><br></div> <div><br></div> <div>생성자에서 <span style="font-size:9pt;line-height:1.5;"> </span><span style="font-size:9pt;line-height:1.5;">레퍼런스를 사용해서 </span><span style="font-size:9pt;line-height:1.5;">초기화 리스트를 작성한다면 </span></div> <div>아래의 소스와 같더라구요.</div> <div><br></div> <div><p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">#include <iostream></span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"> </span></p><p></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">class Some</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">{</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">public:</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"> <b> int &ri;//레퍼런스 선언만 있음,초기화X</b></span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"> Some(int &i) : ri(i) { }</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"> void OutValue() { printf("%d\n",ri); }</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">};</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"> </span></p><p></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">void main()</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">{</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"> int i=5;</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"> Some S(i);</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"> S.OutValue();</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">}</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"><span style="line-height:18px;">그런데 이 소스코드에서 <b>레퍼런스가</b></span></span><span style="font-size:9pt;line-height:1.5;"><b> 선언과 동시에 초기화 되어있지 않은데도</b></span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">실제 컴파일하면 에러가 없는데요.</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">그런데 어째서 생성자에서만 레퍼런스를 초기화 없이 선언만 해서 사용할 수 있나요?</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us">그리고 생성자 이외에 C++에서 레퍼런스를 선언만해서 나중에 변수를 대입해서 사용할 수 있는 부분이 또 있는지 알고 싶네요.</span></p> <p class="a5" style="margin:0pt 8.5pt .0001pt;text-align:justify;line-height:12pt;border:none;padding:0pt;font-size:9pt;"><span lang="en-us"><br></span></p></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.