수색…
참조 정의
참조는 비슷하게 동작하지만 const 포인터와 완전히 유사하지는 않습니다. 참조는 앰퍼샌드 &
형식 이름 뒤에 접미사로 정의됩니다.
int i = 10;
int &refi = i;
여기서 refi
는 i
바인딩 된 참조입니다.
참조는 기본 객체에 대한 별칭처럼 동작하는 포인터의 의미를 추상화합니다.
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