Vector vec1;
vec1.Add(vec2);
// 사실은 이렇게 더하는 것 뿐인데... 함수 호출 오버헤드를 감당하자니 뭔가 찜찜하다.
vec1.mX += vec2.mX;
vec1.mY += vec2.mY;
//[member]
class Animal
{
pulbic:
Animal();
inline int GetAge();
};
int Animal::GetAge()
{
return mAge;
}
//[not member]
inline int Square(int number)
{
return number * number;
}
Cat* cat = new Cat();
cout << cat->GetAge() << endl;
컴파일러는 위 코드를 다음과 같이 바꿔준다.
cout << cat.mAge << endl;
int data = Square(num);
컴파일러이 의해서 다음과 같이 변경
int data = num * num;
C의 매크로 개념과 비슷, C의 매크로는 순수하게 TEXT 복사이다(컴파일러가 아닌 preprocessor가 처리)
그럼 매크로를 사용해도 되나??? NO...
매크로는 디버깅이 어려움, 브레이크 포인트 못 건다, 콜스택에 나오지도 않는다.
매크로는 범위를 준수하지 않는다.
무조건 전역
정말로 매크롤를 쓸 이유가 있지 않는한 인라인을 사용.
매크롤 사용하는 경우는 #ifdefine 같이 헤더파일 중첩 방지라 던가 어떤 코드를 컴파일 할지 안할지 결정할 때
inline 키워드를 사용할 때 주의할 점
inline은 힌트일 뿐 반드시 되리라는 보장이 없다.
inline 함수 구현이 헤더 파일에 위치 해야 한다.
// [B.h]
class B
{
public:
inline void MyInlineFunction();
}
void B::MyInlineFunction()
{
cout << "Inline" << endl;
}
// [a.cpp]
#include "B.h"
void Test()
{
// B.h에 인라인 구현체가 있어야 코드를 복사 할 수 있다. 없으면 어디서 찾으라고...
}
inline 함수는 간단한 함수에 적합하다.
실행 파일의 크기가 증가 할 수 있다.