디폴트 매개변수
- 함수를 호출할 때 실인수를 생략 가능 -> 호출자 코드만 봐서는 함수 원형을 유추 불가능
- 확장성을 위해 사용하고, 미래의 수정에 닫혀있도록 하기 위해 사용
- 디폴트 값은 반드시 오른쪽 매개변수부터 기술해야 함
- 기본값과 함께 사용하면 모호성이 존재
- 모호성은 유지보수에 좋지 않음
int Add(int a, int b = 10)
{
return a + b;
}
int Add(int nParam)
{
return nParam + 10;
}
int main(void)
{
Add(3); //error: call of overloaded 'Add(int)' is ambiguous
return 1;
}
함수 다중 정의
- C++은 다형성의 개념이 존재(Overloading)
- 사용자의 편의를 위해 제작자는 같은 코드를 반복해야 함
- 해당 코드에서 오류 발생 시 유지보수 측면에서 문제 발생
- 이를 함수 template을 사용해서 간단하게 표현 및 메모리 절약 가능
int Add(int a, int b)
{
return a + b;
}
double Add(double a, double b)
{
return a + b;
}
template <typename T>
T Add(T a, T b)
{
return a + b;
}
int main()
{
Add(3, 4);
Add<int>(3, 4);
}
인라인 함수
- 함수를 호출하면 스택 메모리 사용이 증가 및 매개변수로 인한 메모리 복사 발생
- 매크로를 사용해 해결 가능하나 매크로는 논리적 오류 발생 위험(매개변수 지정 x 등)이 있음
- 이를 위해 인라인 함수를 사용
- 같은 코드가 기계어에 반복해서 나올테니 일정 길이 이상의 함수에는 사용하는 것이 바람직하지 않음 -> visual studio에서는 컴파일러가 인라인 함수로 확장을 수행
inline int Add(int a, int b)
{
return a + b;
}