> 백엔드 개발 > C++ > C에서 참조별 전달 매개변수와 함께 기본값을 어떻게 사용할 수 있습니까?

C에서 참조별 전달 매개변수와 함께 기본값을 어떻게 사용할 수 있습니까?

DDD
풀어 주다: 2024-11-27 22:44:15
원래의
498명이 탐색했습니다.

How Can I Use Default Values with Pass-by-Reference Parameters in C  ?

C에서 기본값과 참조로 매개변수 전달

C에서 함수 매개변수는 값과 참조로 모두 전달될 수 있습니다. 값으로 전달하는 경우 매개변수 값의 복사본이 만들어지고 이 복사본이 함수에 전달됩니다. 참조로 전달하는 경우 함수는 매개변수의 메모리 주소에서 직접 작동합니다.

참조로 매개변수를 전달하는 경우 전달된 매개변수와 동일한 방식으로 기본값을 지정할 수 없습니다. 값. 기본값은 함수가 정의될 ​​때 초기화되지만 참조 매개변수는 인수가 전달된 함수를 호출할 때만 초기화되기 때문입니다.

설명하려면 다음 함수 선언을 고려하세요.

virtual const ULONG Write(ULONG &State = 0, bool sequence = true);
로그인 후 복사

여기서 "State" 매개변수는 ULONG에 대한 참조로 선언되고 "sequence" 매개변수는 부울로 선언됩니다. 그러나 "State"("= 0")에 기본값을 할당하면 오류가 발생합니다.

error C2440: 'default argument' : cannot convert from 'const int' to 'unsigned long &'
A reference that is not to 'const' cannot be bound to a non-lvalue
로그인 후 복사

이 오류는 const가 아닌 참조를 lvalue가 아닌(예: 임시 표현). 그러나 const 참조에 대한 기본값을 지정할 수 있습니다.

virtual const ULONG Write(const ULONG &State = 0, bool sequence = true);
로그인 후 복사

이 경우 "State" 매개변수는 ULONG에 대한 const 참조이며 기본값("= 0") const lvalue입니다. 이를 통해 "상태" 값을 지정하지 않고도 함수를 호출할 수 있습니다.

이 규칙의 한 가지 예외는 정적 변수를 비상수 참조의 기본값으로 사용할 때입니다.

static int AVAL = 1;

void f(int &x = AVAL) {
   // stuff
} 

int main() {
     f();       // equivalent to f(AVAL);
}
로그인 후 복사

이 예에서 "x" 매개변수는 int에 대한 비상수 참조이고 기본값("AVAL")은 정적 변수입니다. 이를 통해 "x" 값을 지정하지 않고도 함수를 호출할 수 있습니다. 그러나 이 기술은 실용성이 제한적입니다.

위 내용은 C에서 참조별 전달 매개변수와 함께 기본값을 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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