2011-08-07 7 views
3

C++에서 const 참조 개념과 관련하여 의문의 여지가있었습니다. 두 번째 j20 즉 새 값을 인쇄하지 않는 이유는Const 참조 - C++

int i =10; 
const int &j = i; 
cout<<"i="<<i<<" j:"<<j; // prints i:10 j:10 

i = 20; 
cout<<"i="<<i<<" j:"<<j; // prints i:20 j:10 

.

변수에 대한 참조가 두 변수 사이의 강한 결합을 나타내는 경우 어떻게 가능합니까?

+0

gcc 4.5.2에서 인쇄하는 경우, 어떤 컴파일러를 사용하고 있습니까? – Torp

+0

그게 잘못입니다. http://ideone.com/IATb1 어떤 컴파일러를 사용하고 있습니까? –

+0

이 코드를 사용한 컴파일러는 무엇입니까? 이것은 올바르지 않아야하며 예상대로 Visual Studio 2008로 다시 생성 할 수 없습니다. –

답변

6

이것은 컴파일러 버그입니다. 코드는 20 20을 인쇄해야합니다.

+4

나는 이것이 매우 실패했기 때문에 이것을 컴파일러 버그라고 부르지 않았다. 또한 사양과 완전히 상충되기 때문입니다. – Nobody

+0

그래서 사양과 완전히 일치하지 않으면 버그가 아닙니다. – jalf

+3

버그를 호출하기에는 너무 이릅니다. 아직 영향을 재현 할 수있는 코드는 없습니다. 위의 내용은 사용자 오류이며 실수를 진단 할 수있는 관련 컨텍스트를 잘라 냈을 가능성이 훨씬 큽니다. –

3

const 참조은 refferant의 값을 변경할 수 없다는 것을 의미합니다. 그러나 참조자는 값을 변경하여 참조에 영향을 줄 수 있습니다. 나는 왜 당신이 보여준 결과를 얻고 있는지 모른다.

It actually changes and see the output here.

4

나는 j 두 번째 cout20를 인쇄하지 않을 어떤 이유가 표시되지 않습니다.

는이 코드 실행 :

int main() { 
     int i =10; 
     const int &j = i; 
     cout<<"i="<<i<<" j:"<<j << endl; // prints i:10 j:10 

     i = 20; 
     cout<<"i="<<i<<" j:"<<j << endl; // prints i:20 j:10 
     return 0; 
} 

을 그리고 그것은 나에게이 출력했다 :

i=10 j:10 
i=20 j:20 

온라인 데모 자신을 참조하십시오 : http://ideone.com/ELbNa

의미 중 하나를 당신이있어 컴파일러 (아마도 C++에서 가장 기본적인 것 때문에) 버그를 가지고 있거나, 출력을 올바르게 보지 못했습니다 (가능성이 가장 높습니다).

+1

+1 또는 모든 문맥을 복사하지 않았습니다. –

+0

@ 마틴 : 그래 .. 그게 사실일지도 몰라 ... – Nawaz

0

여기서 한 점 더 추가하면 const 참조는 값을 초기화하는 데 lvalue가 필요하지 않습니다. 예를 들어,

int &r = 10;   //ERROR: lvalue required 
const int &cr = 10;  //OK