본문 바로가기

C++/C++ 문법

[C++] 디폴트 매개변수 (Default Value, Default Parameter)

728x90
반응형

디폴트 매개변수

 

디폴트 매개변수란 매개변수에 기본적으로 설정되어 있는 값을 의미한다.

 

즉, 함수의 호출 시 Argument 가 전달되지 않았을 때 매개변수에 저장될 값을 미리 선언하는 것이다.

 

코드로 보면 좀 더 이해가 빠를 수 있을 것이다.

 

#include <iostream>

int func(int a = 10)
{
	return a+5;
}

int main()
{
	std::cout << func() << std::endl;
	std::cout << func(10) << std::endl;

	return 0;
}

 

위 코드에서 func()과 func(10)은 같은 값을 지닌다.

 

func()는 Argument가 전달되지 않았으므로 디폴트 매개변수가 사용되어 10이 전달된 것으로 간주하는 것이다.

 

 

 

 

 

디폴트 매개변수를 여러 개 사용하는 것도 가능하다.

 

#include <iostream>


int func(int a = 5, int b = 15)
{
	return a + b;
}

int main()
{
	std::cout << func() << std::endl;
	std::cout << func(5) << std::endl;
	std::cout << func(5, 15) << std::endl;
	std::cout << func(35, 25) << std::endl;

	return 0;
}

 

func()는 인자가 아무것도 전달되지 않았으므로 a에는 5, b에는 15가 전달된 것으로 간주한다.

 

func(5)는 a는 5가 전달되었고 b에는 인자가 전달되지 않았으므로 15가 전달된 것으로 간주한다.

 

func(5, 15)는 a에는 5가 전달되었고 b에는 15가 전달되었다.

 

func(35, 25)는 a에는 35가 전달되었고 b에는 25가 전달되었다.

 

 

 

따라서 위 코드의 결과는 다음과 같다.

 

 

 

 

 

 

 

 

부분적 디폴트 매개변수 설정

 

아래 코드와 같이 함수의 매개변수를 일부분만 디폴트 매개변수로 설정하는 것도 가능하다.

 

int func(int a, int b = 5, int c = 15) { }

 

 

 

 

하지만 아래 코드와 같이 오른쪽의 매개변수의 디폴트 값을 비우는 형태로는 사용할 수 없다.

 

int func(int a = 5, int b = 15, int c) { }

 

 

 

 

 

부분적으로 디폴트 매개변수를 설정할 때에는 반드시 오른쪽 매개변수의 디폴트 값부터 채우는 형태로 정의해야 한다.

 

따라서 아래 정의들은 모두 유효하다.

 

int func(int a = 0, int b = 5, int c = 15) { }
int func(int a, int b = 5, int c = 15) { }
int func(int a, int b, int c = 15) { }
int func(int a, int b, int c) { }

 

 

 

이렇게 되는 이유는 함수에 전달되는 인자가 왼쪽에서부터 채워지기 때문이다.

 

 

 

 

 

 

 

 

 

728x90
반응형