Default Arguments

기본 매개변수 비용

기본값은 함수 선언에 붙는 호출 규칙이다. 오버로드, 헤더 배포, 의미 변화와 얽히면 호출자가 어떤 값을 생략했는지 흐려질 수 있다.

01

생략 가능한 값인지 판단한다

항상 같은 정책값인지, 호출마다 의미가 달라지는 값인지 분리한다.

02

오버로드와 충돌 검토

기본 인자 때문에 두 함수가 같은 호출 형태를 받아 모호해질 수 있다.

03

변경 비용 계산

라이브러리 헤더의 기본값을 바꾸면 기존 바이너리와 재컴파일 범위가 문제가 된다.

trailing
뒤쪽부터 생략 기본값은 오른쪽 매개변수부터 채워야 한다.
중간 인자만 생략할 수 없다.
header
호출 규칙 노출 호출부가 보는 선언에 기본값이 있어야 한다.
정의부와 중복 지정하지 않는다.
overload
모호성 위험 기본 인자와 overload가 같은 호출 형태를 만들면 컴파일 오류가 난다.
API 표면을 줄인다.
policy
의미 있는 기본값 timeout, retry처럼 정책값이면 이름 있는 옵션 객체가 더 나을 수 있다.
불린 기본값은 특히 읽기 어렵다.

호출 가독성 · 모호한 후보 · 정책 변화 점검

호출 가독성 생략된 값이 무엇인지 함수 이름만으로 알 수 있는가.
모호한 후보 기본값 때문에 동일한 호출이 두 overload에 모두 맞지 않는가.
정책 변화 나중에 기본값이 바뀌어도 기존 호출 의미가 갑자기 바뀌지 않는가.

옵션 객체 후보

struct ConnectOptions {
    std::chrono::milliseconds timeout{1000};
    int retries{3};
};
void connect(Server server, ConnectOptions options = {});