다른 변수를 가리키는 포인터를 지정하려면 변수에 주소를 &으로 지정하여 포인터를 지정합니다.C++에서 참조 초기화
int foo = 10;
int *bar = &foo;
지금 위와 같은 논리를 따르고 대신 참조 유형을 만듭니다.
int foo = 10;
int &bar = &foo;
나는 이것이 효과가 있다고 생각하지만 그렇지 않습니다. 왜?
다른 변수를 가리키는 포인터를 지정하려면 변수에 주소를 &으로 지정하여 포인터를 지정합니다.C++에서 참조 초기화
int foo = 10;
int *bar = &foo;
지금 위와 같은 논리를 따르고 대신 참조 유형을 만듭니다.
int foo = 10;
int &bar = &foo;
나는 이것이 효과가 있다고 생각하지만 그렇지 않습니다. 왜?
포인터와 참조가 같은 것이 아니기 때문에. 참조는 "다른 이름"또는 "별칭"을 의미하는 것으로 생각할 수 있습니다.
즉, bar
은 예제에서 foo
의 또 다른 이름입니다. int &bar = foo;
을 수행 할 때 bar
을 foo
의 다른 이름으로 사용하려면 foo
의 주소를 bar
에 할당하지 않으려합니다. 그러나 포인터는 가리키는 객체의 주소를 저장하므로 포인터를 사용하여 주소가 foo
인 주소를 가져와 bar
포인터에 할당해야합니다.
컴파일러는 어떻게 해석할까요?작업이 실제로 foo에서 수행 될 것인가? 예 : bar가 foo로 대체되거나 foo에 대한 포인터로 작동하지 않을 것인가? – Carlj901
@ user1047423 : 구현 정의입니다. C++ 표준은 참조에 저장 영역이 있는지 여부는 지정되지 않았습니다. 즉, 컴파일러 작성자는 원하는 것을 자유롭게 할 수 있습니다. 일반적으로 포인터가 사용되지만 구현은 모든 막대를 제거하고 foo도 사용합니다. –
참조를 참조 할 때와 동일한 유형으로 초기화해야하므로 작동하지 않습니다.
int foo = 10;
int &bar = foo;
당신이 이런 식으로 초기화 할 때 : 당신은 포인터 - 투 - INT와의 int 참조를 초기화하려는
int &bar = &foo;
를이 경우. 유형이 일치하지 않습니다.
참조는 포인터와 같지 않지만 컴파일러가이를 포인터로 구현할 수 있습니다. 참조는 기본적으로 "내가 바를 언급 할 때, 나는 정말로 foo에 대해 말하고있다"라고 말한다.
나는 지식에 대한 당신의 탐구에 박수를 보냅니다.하지만이 방법으로 참조를 만드는 것이 완전히 무의미하다고 생각할 수는 없습니다. –
그 주석만큼 거의 무의미합니다. 나는이 두 가지 예가 어떻게 다른지 이해하려고 애를 썼다. – Carlj901
아무도 의도하지 않았으므로 불쾌감을 느끼지 마십시오. 나는 내가 알지 못했던 이것을위한 유스 케이스에 대해 깨달을 수 있기를 바랄 뿐이었다. –