>백엔드 개발 >C++ >C 참조를 재할당할 수 있나요?

C 참조를 재할당할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-12-02 12:44:14771검색

Can C   References Be Reassigned?

C에서 참조 재할당

C에서 참조는 종종 메모리 주소에 대한 불변 바인딩으로 설명됩니다. 그러나 최근 한 질문은 이러한 이해에 의문을 제기했습니다. 이 주제를 살펴보기 위해 다음 C 프로그램을 살펴보겠습니다.

#include <iostream>

int main() {
    int i = 5, j = 9;

    int &ri = i;
    std::cout << "ri is: " << ri << '\n';

    i = 10;
    std::cout << "ri is: " << ri << '\n';

    ri = j;  // Is this not reassigning the reference?
    std::cout << "ri is: " << ri << '\n';

    return 0;
}

이 코드는 성공적으로 컴파일되고 출력은 다음과 같습니다.

ri is: 5
ri is: 10
ri is: 9

질문이 생깁니다. 할당이 ri가 아닌가요? =j; 불변 참조 개념에 모순됩니까?

아니요, ri는 여전히 i에 대한 참조입니다. 이는 ri와 i의 주소를 인쇄하고 두 주소가 동일한지 확인하여 확인할 수 있습니다.

실제로 발생한 것은 ri 참조를 사용하여 i 값을 수정하는 것입니다. 참조가 불변이고 항상 동일한 메모리 위치를 가리켜야 하기 때문에 ri에 새 값을 할당하는 것은 실제로 금지됩니다.

비교를 위해 다음 코드를 고려하세요.

const int &cri = i;

이것은 코드는 cri에 대한 할당을 허용하지 않습니다. 왜냐하면 cri는 상수에 대한 참조이기 때문입니다. 이는 참조를 새 메모리 위치에 재할당할 수는 없지만 값이 변경 가능하다면 참조하는 주소에서 값을 수정하는 데 여전히 사용할 수 있음을 보여줍니다.

결론적으로 ri = j; 원래 프로그램의 할당은 참조 자체를 재할당하는 것이 아니라 참조하는 값을 수정하는 것입니다.

위 내용은 C 참조를 재할당할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.