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 중국어 웹사이트의 기타 관련 기사를 참조하세요!