> 백엔드 개발 > C++ > C 참조를 재할당할 수 있습니까, 아니면 다른 일이 발생합니까?

C 참조를 재할당할 수 있습니까, 아니면 다른 일이 발생합니까?

Susan Sarandon
풀어 주다: 2024-12-04 22:07:13
원래의
403명이 탐색했습니다.

Can C   References Be Reassigned, or Is Something Else Happening?

C에서 참조를 재할당할 수 있습니까?

C에서 참조는 한 번만 초기화해야 하는 불변 엔터티로 종종 선전됩니다. 그러나 최근의 코드 조각은 이 원칙에 대한 의문을 제기했습니다.

코드 조각:

int i = 5, j = 9;
int &ri = i;
cout << "ri is : " << ri << "\n";
i = 10;
cout << "ri is : " << ri << "\n";
ri = j;
cout << "ri is : " << ri << "\n";
로그인 후 복사

관찰:

  • 코드는 다음 없이 성공적으로 컴파일됩니다. 오류가 발생했습니다.
  • 출력에 따르면 ri는 처음에 i를 가리킨 다음 j를 참조하도록 변경됩니다.

질문:

이렇게 합니까? 코드가 실제로 참조 ri를 다시 할당하거나 다른 것입니다. 무슨 일이 일어나고 있나요?

답변:

아니요, ri는 여전히 i를 지칭합니다. 명백한 재할당은 실제로 참조 ri를 통한 i 수정입니다.

설명:

참조가 선언되면(예: int &ri = i) 바인딩됩니다. 개체(이 경우)에 연결되어 프로그램 전체에 걸쳐 연결된 상태로 유지됩니다. 코드 ri = j는 ri를 재할당하지 않고 오히려 참조 ri를 통해 i의 값을 수정합니다.

이를 증명하기 위해 &ri와 &i를 사용하여 ri와 i의 주소를 인쇄할 수 있습니다. 그러면 이들이 그대로 남아 있음을 알 수 있습니다. 동일합니다. 또한 ri가 j에 재할당되면 ri를 통해 i를 수정하는 것이 더 이상 불가능합니다. 이는 주어진 코드의 경우와 다릅니다.

결론:

코드 조각에서는 참조를 재할당할 수 있는 것처럼 보이지만 그렇지 않습니다. 대신, 참조하는 개체를 간접적으로 수정합니다. Const 참조(예: const int &cri = i)는 그러한 수정을 방지하고 진정한 불변성을 강화합니다.

위 내용은 C 참조를 재할당할 수 있습니까, 아니면 다른 일이 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿