수색…


참조 정의

참조는 비슷하게 동작하지만 const 포인터와 완전히 유사하지는 않습니다. 참조는 앰퍼샌드 & 형식 이름 뒤에 접미사로 정의됩니다.

int i = 10;
int &refi = i;

여기서 refii 바인딩 된 참조입니다.
참조는 기본 객체에 대한 별칭처럼 동작하는 포인터의 의미를 추상화합니다.

refi = 20; // i = 20;

단일 정의에서 여러 참조를 정의 할 수도 있습니다.

int i = 10, j = 20;
int &refi = i, &refj = j;

// Common pitfall :
// int& refi = i, k = j;
// refi will be of type int&.
// though, k will be of type int, not int&!

참조 정의시 올바르게 초기화 되어야 하며 나중에 수정할 수 없습니다. 다음 코드는 컴파일 오류를 발생시킵니다.

int &i; // error: declaration of reference variable 'i' requires an initializer

또한 포인터와 달리 nullptr 대한 참조를 직접 바인드 할 수 없습니다.

int *const ptri = nullptr;
int &refi = nullptr; // error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'nullptr_t'

C ++ 참조는 기존 변수의 별칭입니다.

C ++의 참조는 Alias 또는 다른 변수 이름입니다. 우리 대부분은 여권 이름과 닉네임을 사용하여 추천 할 수 있습니다.

참조는 문자 그대로 존재하지 않으며 메모리를 차지하지 않습니다. 참조 변수의 주소를 출력하면 참조하는 변수의 주소와 동일한 주소가 인쇄됩니다.

int main() {
    int i = 10;
    int &j = i;
    
    cout<<&i<<endl;
    cout<<&b<<endl;
    return 0;
}

위의 예제에서, 두 cout 은 같은 주소를 출력 할 것이다. 함수에서 변수를 참조로 사용하면 상황은 동일합니다.

void func (int &fParam ) {
   cout<<"Address inside function => "<<fParam<<endl;
}

int main() {
    int i = 10;
    cout<<"Address inside Main => "<<&i<<endl;    

    func(i);

    return 0;
}

이 예에서도 두 cout 모두 동일한 주소를 인쇄합니다.

지금까지 C++ References 가 별칭 일 뿐이며 별칭을 만들려면 별칭이 참조 할 수있는 것이 필요합니다.

이것이 바로 이런 문이 컴파일러 오류를 던지는 정확한 이유입니다.

int &i;

왜냐하면 별칭은 아무 것도 언급하지 않기 때문입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow