>백엔드 개발 >C++ >C++ 함수 호출 규칙은 무엇입니까?

C++ 함수 호출 규칙은 무엇입니까?

WBOY
WBOY원래의
2024-04-12 10:15:01622검색

C++에는 네 가지 함수 호출 규칙이 있습니다: 값으로 전달, 포인터로 전달, 참조로 전달, RVO로 전달. 값으로 전달하면 매개변수의 복사본이 전달되고, 포인터로 전달하면 매개변수의 주소가 전달되고, 참조로 전달하면 매개변수의 참조가 전달되고, RVO로 전달하면 특정 조건에서 개체의 내용이 직접 이동됩니다.

C++ 函数调用约定有哪些?

C++ 함수 호출 규칙

함수 호출 규칙은 함수 호출 중에 매개변수가 전달되는 방법과 호출이 반환될 때 결과가 반환되는 방법을 지정합니다. C++에는 네 가지 주요 함수 호출 규칙이 있습니다.

1. 값별 전달

  • 매개변수 복사본이 함수에 전달됩니다.
  • 함수는 복사본에 대해 작동하며 원래 값에는 영향을 주지 않습니다.
  • 기본 유형(int, float 등)에 효율적입니다.

2. 포인터별 전달

  • 매개변수의 주소가 함수에 전달됩니다.
  • 함수는 포인터를 통해 원래 값을 가리키고 수정할 수 있습니다.
  • 함수에서 다양한 개수의 인수를 반환할 수 있습니다.

3. 참조별 전달

  • 매개변수의 참조(별칭)가 함수에 전달됩니다.
  • 함수는 참조를 통해 원래 값을 가리키고 수정할 수 있습니다.
  • 포인터로 전달하는 것보다 더 효율적입니다(포인터 역참조 방지).

4. RVO 통과(반환 값 최적화, 반환 값 최적화)

  • 함수가 참조가 아닌 개체를 반환하고 해당 개체가 다른 개체에 의해 참조되지 않은 경우 컴파일러는 RVO를 수행합니다.
  • RVO에서 함수는 임시 복사본을 생성하고 반환하는 대신 객체의 내용을 호출자의 컨텍스트로 직접 이동합니다.

실용 사례

// 通过值传递整数
void func_by_val(int val) {
  val++;  // 不会影响原始值
}

// 通过指针传递整数
void func_by_ptr(int *val) {
  (*val)++;  // 会影响原始值
}

// 通过引用传递整数
void func_by_ref(int &val) {
  val++;  // 会影响原始值
}

int main() {
  int a = 5;

  func_by_val(a);
  std::cout << a << std::endl;  // 输出 5

  func_by_ptr(&a);
  std::cout << a << std::endl;  // 输出 6

  func_by_ref(a);
  std::cout << a << std::endl;  // 输出 7
}

위 내용은 C++ 함수 호출 규칙은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.