IT 프로그래밍/C++

[C++] Inline 함수 , 함수 오버로딩, typedef

기술1 2024. 4. 3. 22:28
반응형

inline 함수

 

inline함수는 함수를 빨리 쓰기 위해서 씁니다. 이 키워드를 함수 앞에 붙이면 컴파일러에게 해당 함수가 호출되는 곳에 함수의 코드를 직접 삽입하도록 지시하기 때문에 오버헤드를 줄이고 실행 시간을 줄여주는데요.

 

함수 호출을 수행하는 대신에 함수 내용이 호출 지점에 직접 삽입되면서 성능 향상을 가져올 수 있습니다. 짧은 코드로 이루어진 함수나 작은 규모에 함수에는 inline을 사용하는 것을 권장하지만 긴 함수는 성능을 저하할 수 있습니다. 

inline int min(int x, int y)
{
	return x > y ? y : x;
}

int main()
{
	cout << min(5, 6) << endl;
    cout << min(3, 2) << endl;
    
    cout << (5 > 6 ? 6 : 5) << endl;
    cout << (3 > 2 ? 2 : 3) << endl;
    
    return 0;
}

 

함수 오버로딩

 

#include <iostream>
#include <string>
using namespace std;

int add(int x, int y)
{
	return x + y;
}

double add(double x, double y)
{
	return x + y;
}

int main()
{
	add(1, 2);
	add(3.0, 4.0);

	return 0;
}

기능이 비슷한 경우 오버로딩을 구현한 것입니다. 

 

이렇게 하면 컴파일러가 알아서 int와 double을 판단해서 계산을 해줍니다. 매개변수가 다르면 이름이 같아도 다른 함수처럼 정의를 해버립니다. 그것 중에서 매개변수 파일이 잘 맞는 즉 주어진 인자와 가장 조합이 좋은 함수를 찾아서 실행시켜주는 것입니다. 

 

정수 + 정수 이기 때문에 컴파일러가 add(1, 2) 같은 경우에 int를 사용하는 것이고 밑에 실수인 것은 double를 컴파일러가 알아서 판단해주는 것입니다. 

리턴타입만 다른 경우는 오버로딩이 안된다.
매개변수가 달라야 오버로딩이 가능하다.

 

typedef

#include <iostream>
#include <string>
using namespace std;

typedef int my_int;

void print(int x) {}
void print(my_int x) {}

int main()
{

	return 0;
}

typedef은 사용자가 임의로 이름을 변경해주는 것인데요. 저 코드에선 int를 my_int로 바꿔주었습니다. 그리고 저렇게 두 개의 void를 만들어줬는데요. 하지만 컴파일러가 body가 두개라고 경고를 해줍니다. 

 

컴파일러한테는 이러한 눈속임이 통하지 않습니다. 

 

 

반응형