함수 오버로딩은
매개변수의 종류 및 개수가 다른 경우에만 허용된다
반면, 반환 타입은 함수 오버로딩에 영향을 미치지 않는다
그 이유는
1) 호출 시 함수를 식별하는 기준
: 함수를 호출할 때 컴파일러는 함수의 이름과 매개변수 목록을 기반으로
호출할 함수를 식별한다
반환 타입은 이러한 함수 식별 과정에서 고려되지 않는다
2) 호출 시 반환 값의 사용
: 함수를 호출한 곳에서 반환 값을 사용하지 않을 수도 있다
따라서 반환 타입만으로는 함수 오버로딩이 결정되지 않는다
3) C++ 문법의 간결성
: C++의 문법은 간결하고 명확해야 한다
반환 타입이 함수 오버로딩에 영향을 미친다면
코드를 이해하기 어려워질 수 있다
따라서 C++에서는 함수 오버로딩에는 반환 타입이 고려되지 않으며,
함수의 이름과 매개변수 목록이 서로 다른 경우에만 함수 오버로딩이 허용된다
함수 오버로딩은
C++ 컴파일러가 Name Mangling을 통해
매개변수 목록을 고려해서 컴파일과 링크를 실행한다
아래의 함수 오버로딩이 작성된 코드에서
오브젝트 파일의 symbol table을 확인하면
아래와 같이 나온다
namespace NNN
{
class CCC
{
public:
double FFF(int n);
int FFF(float n, double m);
};
double CCC::FFF(int n)
{
return 0.0;
}
int CCC::FFF(float n, double m)
{
return 0;
}
}
이처럼 파라미터 형태에 따라서 Name Mangling이 이루어지고
함수 오버로딩이 동작한다
또한, Name Mangling은 컴파일러마다 방식이 다르기 때문에
컴파일이 된 오브젝트 파일은 다른 컴파일러에서는 링킹이 안된다
추가적으로,
virtual function은
런타임 중에 결정되는 dynamic function binding이고
function overloading은
컴파일 시에 결정되는 static function binding이다
'C++ > [노코프] Tips' 카테고리의 다른 글
[C++ Tips] Data oriented Programming (0) | 2024.04.08 |
---|---|
[C++ Tips] Early Return (0) | 2024.04.08 |
[C++ Tips] 싱글톤 (0) | 2024.04.07 |
[C++ Tips] static (0) | 2024.04.07 |
[C++ Tips] extern vs. static (0) | 2024.04.07 |