포스트

[C++] inline 키워드

[C++] inline 키워드

C++ inline 키워드 정리


inline 키워드란?

inline은 “이 함수를 호출하지 말고, 함수의 본문을 호출 위치에 복사해 넣어라“는 컴파일러에 대한 힌트입니다.

  • 함수 호출 오버헤드 감소 목적
  • 헤더 파일에 정의된 함수의 중복 정의를 허용
1
2
3
inline int square(int x) {
    return x * x;
}

inline의 두 가지 주요 용도

1. 성능 최적화 (코드 인라인 확장)

  • 자주 호출되는 짧은 함수에 적합
  • 컴파일러가 인라인 확장을 적용할지 말지는 컴파일러 판단

2. 헤더 파일에서 함수 정의 허용

  • 여러 .cpp 파일에서 #include되더라도 중복 정의 오류 발생하지 않음
  • 컴파일 타임에 함수 정의를 공유

사용 예시

헤더 파일에 정의된 인라인 함수

1
2
3
4
// math_utils.h
inline int add(int a, int b) {
    return a + b;
}

컴파일러가 인라인하지 않는 경우

  • 함수가 너무 크거나 복잡한 경우
  • 루프, 분기, 재귀가 많은 경우
  • 인라인 확장 시 코드 크기가 지나치게 커지는 경우

inline vs static

키워드목적헤더 정의 허용중복 정의 허용
inline중복 정의 방지 및 인라인 확장OO
static내부 연결 (다른 파일에서 사용 불가)OO (각 파일마다 개별 정의됨)

C++17부터: inline 변수도 가능

1
2
// config.h
inline constexpr int MaxConnections = 100;
  • 모든 번역 단위에서 중복 정의 없이 공유 가능

inline vs constexpr

항목inlineconstexpr
목적함수 인라인 확장, 중복 정의 방지컴파일 타임 평가
도입 시기C++98C++11 (강화: C++14, C++20)
평가 시점컴파일러 재량 (주로 런타임)컴파일 타임
리턴 값런타임 계산도 가능반드시 컴파일 시 계산 가능해야 함
헤더 정의허용됨허용됨
일반적인 사용 대상짧은 함수, 헤더에 넣는 함수수학적 계산, 상수화 함수/변수

예제 비교

1
2
3
4
5
6
7
inline int square(int x) {
    return x * x; // 런타임 계산
}

constexpr int square_const(int x) {
    return x * x; // 컴파일 타임 계산 가능
}
  • constexpr은 컴파일 타임 상수로 사용 가능
  • inline은 인라인 확장을 위한 힌트이므로 항상 상수는 아님

결론 요약

  • inline은 성능 향상과 헤더에서의 함수 정의 공유를 위한 키워드
  • constexpr컴파일 타임 계산을 위한 함수 또는 변수 지정
  • inline은 컴파일러 재량이며, constexpr은 강제적인 컴파일 타임 평가

둘은 목적과 사용 시점이 다르며, 필요에 따라 구분해서 사용하는 것이 좋습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.