> 백엔드 개발 > C++ > 본문

C++ 함수 매개변수 전달 방법의 함정과 오해

王林
풀어 주다: 2024-04-13 09:03:01
원래의
512명이 탐색했습니다.

C++에서 함수 매개변수를 전달하는 방법에는 값 전달과 참조 전달의 두 가지 방법이 있습니다. 값을 전달하면 매개변수의 복사본이 생성되고 복사본을 수정해도 원래 변수에는 영향을 주지 않습니다. 매개변수 주소는 참조로 전달되며 참조 개체를 수정하면 원래 변수에 직접적인 영향을 미칩니다. 일반적인 함정에는 참조 매개변수를 잘못 전달하여 값에 의한 전달이 발생하는 것, 원래 변수에 영향을 주지 않고 값에 의한 전달 매개변수를 수정하는 것, 초기화되지 않은 참조 및 매달린 참조가 포함됩니다. 문자열을 처리할 때 문자열을 참조로 전달하면 값 전달로 인한 수정 사항이 손실되는 것을 방지할 수 있습니다.

C++ 函数参数传递方式的陷阱和误区

C++ 함수 매개변수 전달의 함정과 오해

C++에서 함수 매개변수를 전달할 때 값 전달과 참조 전달의 두 가지 주요 방법이 있습니다. 일반적인 함정과 함정을 피하려면 두 접근 방식의 미묘한 차이를 이해하는 것이 중요합니다.

값으로 전달

값으로 전달은 매개변수의 복사본을 생성하고 해당 복사본을 함수에 전달합니다. 함수의 복사본에 대한 수정 사항은 표시되지 않습니다.

void print_double(int x) {
  x *= 2;
  std::cout << x << std::endl;
}

int main() {
  int a = 5;
  print_double(a); // 输出:10
  std::cout << a << std::endl; // 输出:5
}
로그인 후 복사

Pass by reference

Pass by reference는 매개변수의 주소를 함수에 전달합니다. 함수에서 참조되는 개체에 대한 수정 사항은 원본 개체에 직접적인 영향을 미칩니다.

void swap(int& a, int& b) {
  int temp = a;
  a = b;
  b = temp;
}

int main() {
  int x = 5, y = 10;
  swap(x, y);
  std::cout << x << " " << y << std::endl; // 输出:10 5
}
로그인 후 복사

Traps and Myths

트랩 1: 참조 매개변수를 잘못 전달함

참조 변수 대신 일반 변수를 전달하면 함수 매개변수가 참조로 선언된 경우에도 값별 전달이 발생합니다.

트랩 2: 값으로 전달된 매개변수를 수정하려고 합니다.

값으로 전달된 매개변수에 대한 수정 사항은 원래 변수에 반영되지 않습니다.

트랩 3: 초기화되지 않은 변수 참조

참조 인수를 전달하기 전에 변수가 초기화되었는지 확인하세요.

트랩 4: 매달린 참조

참조는 참조된 개체가 더 이상 존재하지 않을 때 잘못된 메모리를 가리킵니다. 임시 개체 또는 범위를 벗어난 개체에 대한 참조를 피하세요.

실용 사례: 문자열 처리

문자열의 첫 번째 문자를 가져오는 함수를 생각해 보세요.

char get_first_char(std::string str) {
  return str[0];
}
로그인 후 복사

값별 전달을 사용하면 함수가 반환될 때 모든 수정 사항이 손실됩니다. 이 문제를 해결하려면 문자열을 참조로 전달해야 합니다.

char get_first_char(std::string& str) {
  return str[0];
}
로그인 후 복사

이렇게 하면 문자열에 대한 모든 수정 사항이 함수 외부에 반영됩니다.

위 내용은 C++ 함수 매개변수 전달 방법의 함정과 오해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿