책: Effective C++
주제: C에서 C++로의 전환
항목: #define보다는 const와 inline을 사용한다.
주제: C에서 C++로의 전환
항목: #define보다는 const와 inline을 사용한다.
inline 함수에 대해서..
#define을 이용하는 또 다른 하나의 예는 다음과 같이 함수 매크로를 구현하는 경우이다.
#define max(a,b) ((a) > (b) ? (a) : (b))
이와 같이 매크로를 작성할 때는 언제나 매크로 몸체의 모든 인자를 괄호로 묶어야 한다. 그러나 이를 올바르게 적용하더라도 발생할 수 있는 신기한 상황이 존재한다.
int a = 5, b = 0;
max(++a, b); // a가 두 번 증가한다.
max(++a, b+10); // a가 한 번 증가한다.
max(++a, b); // a가 두 번 증가한다.
max(++a, b+10); // a가 한 번 증가한다.
위와 같은 상황은 inline 함수를 사용함으로써 매크로의 모든 효율성, 모든 예측 동작 및 정규 함수의 타입 안정성을 취할 수 있다.
inline int max(int a, int b) { return a > b ? a : b; };
위의 매크로는 int 타입에 대해서만 적용할 수 있기에, #define을 이용한 경우와 다소 차이가 있다. 그러나 템플릿을 이용하면 문제를 해결할 수 있다.
template<class T>
inline const T& max(const T& a, const T& b)
{ return a > b ? a : b; }
inline const T& max(const T& a, const T& b)
{ return a > b ? a : b; }
Posted by 하솔



