default argument란 파라미터가 전달받는 default value이다
만약 argument로 전달받지 않은 경우 default값이 사용된다
Rule
Default arguments can only be provided for the rightmost parameters.
항상 오른쪽 부터 채워넣어야 한다. 중간 파라미터는 생략하거나 그러는게 아니고
오른쪽으로 다 몰아 넣어야 한다void print(int x=10, int y); // not allowed
default argument가 설정되어 있으면 그 파라미터는 생략하고 argument를
전달해도 동작한다
void print(int x, int y = 10)
{
std::cout << "int";
}
int main()
{
print(1);
return 0;
}
위의 코드는 이상 없다
하지만 위와 같은 속성으로 인해 ambiguous function call이 발생할 수도 있다
void print(int x);
void print(int x, int y = 10);
void print(int x, double y = 20.5);
print(1, 2); // will resolve to print(int, int)
print(1, 2.5); // will resolve to print(int, double)
print(1); // ambiguous function call
이때 컴파일 에러가 발생한다
만약 print(1)이 없으면 에러는 발생하지 않는다