매개변수 타입이 다름
add(int, int) / add(double, double)
호출 인자의 타입으로 두 함수를 구별할 수 있습니다.
컴파일러는 호출문에서 함수 이름과 인자 목록을 보고 후보를 고릅니다. 반환 타입은 오버로드 구분 기준이 아닙니다.
add(a, b) vs add(a, b, c)
int 인자와 double 인자
string, int와 int, string
add(int, int) / add(double, double)
호출 인자의 타입으로 두 함수를 구별할 수 있습니다.
add(int, int, int)
인자가 세 개인 호출은 두 인자 함수와 겹치지 않습니다.
printValue(std::string, int) / printValue(int, std::string)
같은 타입 조합이라도 순서가 다르면 호출 모양이 달라집니다.
int add(int, int) / double add(int, int)
호출문 add(1, 2)만으로 반환 타입을 선택할 수 없습니다.
add로 모인 후보
인자 두 개가 모두 int이므로
int add(int, int)가 정확히 일치합니다.
인자가 세 개이므로 두 인자 버전은 후보에서 제외됩니다.
결과를 double 변수에 담더라도 같은 매개변수 목록의
함수를 둘 수는 없습니다.