> 백엔드 개발 > C++ > C++ 함수의 기본 매개변수와 가변 매개변수의 기본 구현을 살펴보세요.

C++ 함수의 기본 매개변수와 가변 매개변수의 기본 구현을 살펴보세요.

PHPz
풀어 주다: 2024-04-22 21:15:01
원래의
1186명이 탐색했습니다.

기본 매개변수: 함수 정의에서 기본 매개변수 값을 지정하고, 사전 정의된 상수를 사용합니다. 가변 매개변수를 사용하여 표현하고, 배열에 대한 포인터로 컴파일하고, 들어오는 매개변수를 패키징하고, 배열을 탐색하여 매개변수에 액세스합니다.

探究 C++ 函数默认参数和可变参数的底层实现

C++ 함수에서 기본 매개변수와 가변 매개변수의 기본 구현을 살펴보세요.

기본 매개변수

기본 매개변수는 함수 정의에서 매개변수에 대한 기본값을 지정할 수 있는 메커니즘입니다. 실제 매개변수가 전달되지 않을 때 함수가 기본값을 사용할 수 있도록 합니다.

내부적으로 기본 매개변수는 실제로 컴파일러에 의해 구현됩니다. 즉, 상수로 미리 정의된 매개변수입니다. 컴파일러는 기본 매개변수를 사용하여 함수를 호출할 때 들어오는 변수가 전달되는지 확인하고, 전달되지 않으면 미리 정의된 기본값을 사용합니다.

예:

void print_number(int num, int default_num = 10) {
  cout << (num ? num : default_num) << endl;
}
로그인 후 복사

이 함수를 호출할 때 두 번째 매개변수를 전달하거나 전달하지 않을 수 있습니다.

print_number(5); // 输出 5
print_number(0, 20); // 输出 20
로그인 후 복사

가변 매개변수

가변 매개변수는 가변 길이 매개변수라고도 하며, 이를 통해 함수는 변수를 허용할 수 있습니다. 매개변수의 수. C++에서 가변 인수는 타원(...)으로 표시됩니다. ...) 表示。

在底层,可变参数被编译为一个指向数组的指针。当函数被调用时,编译器将传入的参数打包到分配的此数组中。然后,函数可以遍历该数组来访问参数。

例如:

int sum_numbers(int count, ...) {
  int sum = 0;
  va_list args;
  va_start(args, count);  // 获取可变参数列表
  for (int i = 0; i < count; ++i) {
    sum += va_arg(args, int);  // 访问第 i 个参数
  }
  va_end(args);  // 清理可变参数列表
  return sum;
}
로그인 후 복사

当调用该函数时,我们可以传递任意数量的参数:

cout << sum_numbers(3, 1, 2, 3) << endl; // 输出 6
cout << sum_numbers(5, 10, 20, 30, 40, 50) << endl; // 输出 150
로그인 후 복사

实战案例

在现实世界中,默认参数和可变参数有广泛的应用。例如:

  • 用于指定备用值,避免在未传递参数时出现错误。
  • 用于创建灵活且可适应的函数,可以处理不同数量的参数。
  • 用于创建库函数,该函数可接受不定长参数列表,例如 Python 中的 print()
  • 내부적으로 가변 인수는 배열에 대한 포인터로 컴파일됩니다. 함수가 호출되면 컴파일러는 전달된 인수를 이 할당된 배열에 압축합니다. 그런 다음 함수는 배열을 반복하여 매개변수에 액세스할 수 있습니다.
🎜예: 🎜rrreee🎜이 함수를 호출할 때 매개변수를 원하는 수만큼 전달할 수 있습니다. 🎜rrreee🎜🎜실용 사례🎜🎜🎜실제 환경에서 기본 매개변수와 가변 매개변수는 다양한 용도로 사용됩니다. 예: 🎜
  • 매개변수가 전달되지 않을 때 오류를 방지하기 위해 대체 값을 지정하는 데 사용됩니다. 🎜
  • 다양한 수의 인수를 처리할 수 있는 유연하고 적응 가능한 함수를 만드는 데 사용됩니다. 🎜
  • Python의 print() 함수와 같이 가변 길이 인수 목록을 허용하는 라이브러리 함수를 만드는 데 사용됩니다. 🎜🎜

위 내용은 C++ 함수의 기본 매개변수와 가변 매개변수의 기본 구현을 살펴보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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