[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 | 중복 정의 방지 및 인라인 확장 | O | O |
static | 내부 연결 (다른 파일에서 사용 불가) | O | O (각 파일마다 개별 정의됨) |
C++17부터: inline 변수도 가능
1
2
// config.h
inline constexpr int MaxConnections = 100;
- 모든 번역 단위에서 중복 정의 없이 공유 가능
inline vs constexpr
| 항목 | inline | constexpr |
|---|---|---|
| 목적 | 함수 인라인 확장, 중복 정의 방지 | 컴파일 타임 평가 |
| 도입 시기 | C++98 | C++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 라이센스를 따릅니다.