자기개발/C++
C++ - inline함수란(feat 매크로함수 + template)
pi92
2021. 10. 7. 09:16
기본적으로 함수를 호출 할 때에는 오버헤드 패널티가 발생합니다. 하지만 inline 함수는 이러한 오버헤드를 줄이고 C++의 실행 속도 개선을 위해 등장 했습니다. 비슷한 기능으로는 C언어에서 매크로 함수가 있습니다.
(+)매크로 함수는 전처리기에 의해서 처리되지만, inline 함수는 컴파일러에 의해 처리가 됩니다.
매크로 함수의 예
#include <iostream>
#define DOUBLE(x) ((x)*(x))
using namespace std;
int main(void)
{
cout << DOUBLE(2) << endl;
return 0;
}
실행시
#include <iostream>
#define DOUBLE(x) ((x)*(x))
using namespace std;
int main(void)
{
cout << ((2)*(2)) << endl;
return 0;
}
변경되어 나옵니다.
inline 함수 예
#include<iostream>
inline int Double(int a){ return a * a;}
int main(void){
int num;
num = Double(5);
return 0;
}
실행시
#include<iostream>
inline int Double(int a){ return a * a;}
int main(void){
int num;
num = 5*5;
return 0;
}
변경되어 나옵니다.
하지만 보시는것처럼 inline 함수는 인자가 정해져 있어서 위의 식에서 인자가 int형이므로 실수를 넣었을 시 원하는 값이 나오지 않을 수 있습니다. 하지만 템플릿을 사용하여 정수나 실수형을 모두 커버할 수 있는 인라인 함수를 만들수 있습니다.
template을 적용한 inline 함수 예
#include <iostream>
template <typename T>
inline T Double(T a){ return a*a; }
int main(void){
int num;
num = Double(2.5);
return 0;
}