블로그 이미지
LanSaid

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 12. 17. 21:53 Study/C++
디폴트로 지정된 매개변수 값은 호출 부에서 인자 전달을 하지 않아도 컴파일러가 자동으로 채워준다.
void Function(int _Num = 0)
{
   cout << _Num << endl;
}


void main()
{
   Fuction(0);
   Fuction();
}
 ->> 위 상황은 동일한 결과






특징
1. 함수 선언을 별도로 둘 시 (ex> 클래스 선언부)에는 디폴트 매개변수 지정을 선언 부에서 하고 정의부에서는 하지 않는다.
  -> 컴파일 시점에 컴파일러에게 판단하기 위한 기준을 제공하기 위함

2. 컴파일러가 함수 호출 부분에서 받은 매개변수 값을 함수의 매개변수 메모리 공간에 매칭 할 때 가장 왼쪽의 매개변수 부터 대입한다.
  -> 매개변수가 어디에 적용이 되는지 정확하게 알고 사용해야 본인이 의도한대로 적용된다는 점을 인지 필요.
ex>
void Function(int _Num1, int _Num2 = 4, int _Num3 = 5);
Function(1);  호출 시 컴파일러가 처리하는 방식
 _Num1 에 명시된 1을 컴파일러가 적용
 _Num2 에 디폴트 4를 컴파일러가 적용
 _Num3 에 디폴트 5를 컴파일러가 적용

Function(1,2);  호출 시 컴파일러가 처리하는 방식
 _Num1 에 명시 된 1을 컴파일러가 적용
 _Num2 에 명시 된 2를 컴파일러가 적용
 _Num3 에 디폴트 5를 컴파일러가 적용


3. 2의 특징으로 인해 디폴트 값은 매개변수의 가장 오른쪽 부분부터 채워나가야하며 디폴트 값이 지정된 매개변수 사이에 디폴트 값이 없는
 매개변수가 존재할 경우 컴파일러는 에러로 간주한다.

void Function(int _Num1 = 1, int _Num2, int _Num3 = 3);
--> 컴파일러 에러
posted by LanSaid