그 의미는 무엇입니까? 참조에 의한 패스 사용은 참조를 전달하는 것이므로 리턴 값없이 포인터를 직접 변경할 수 있으며 포인터에 의한 패스는 유사하지만 실행 시간은 느립니다. 그러나, 나는 무엇을 이해하지 않는다 * & 않습니다. 예를 들어"패스 * *"란 무엇입니까?
foo(int * & var) { }
그 의미는 무엇입니까? 참조에 의한 패스 사용은 참조를 전달하는 것이므로 리턴 값없이 포인터를 직접 변경할 수 있으며 포인터에 의한 패스는 유사하지만 실행 시간은 느립니다. 그러나, 나는 무엇을 이해하지 않는다 * & 않습니다. 예를 들어"패스 * *"란 무엇입니까?
foo(int * & var) { }
포인터가 참조를 전달하므로 포인터가 가리키는 내용을 변경하고 해당 변경 사항을 호출자에게 반영 할 수 있습니다. 예를 들어
는 :
void notByReference(int *p) {
p = nullptr;
}
void byReference(int *&p) {
p = nullptr;
}
int main() {
int *i = new int;
notByReference(i); //i is not changed since a copy of the pointer was passed
byReference(i); //i itself is changed, leaking memory
}
이 참조로 포인터를 전달할 수 있습니다. 함수를 통해 포인터를 수정하고 호출자가 수정 한 내용을 볼 수 있습니다.
당신은 거기서 멈추지 않아도됩니다. 예를 들어 int를 가리키는 포인터를 가리키는 포인터를 전달할 수 있습니다.
void foo(int** &var)
&
및 *
같은 한정자를 입력 명심은 서로 독립적입니다. some_type&
을 보면 단순히 "sometype
에 대한 참조"를 의미하며, 이는 함수가 호출자의 인수 버전을보고 수정할 수 있음을 의미합니다. sometype
이 포인터 인 경우에는 호출자 버전의 인수 유형이 포인터이고 함수가 해당 포인터를 수정할 수 있음을 의미합니다.
나는 "포인터에 의한 패스가 비슷하지만 더 느린 런타임"으로 어디에서 갈지 확신하지 못합니다. 모든 의도와 목적을 위해 포인터로 또는 참조에 의해 객체를 전달하는 성능은 동일합니다 (참조에 의한 전달은 흔히 후드 아래의 포인터를 사용하여 구현됩니다). –