TIL: inline static과 constexpr

박춘팔·5일 전

CPP TIL

목록 보기
15/15

📅 2026-05-04

inline static

class 내무 멤버변수를 static으로 선언할 경우에 초기화가 불가능하다.
cpp에서 따로 초기화를 해줘야하는데

C++17부터 inline을 붙임으로써 선언과 동시에 초기화가 가능하다.

class Test
{
	static int a; // 오류X cpp에서 반드시 초기화
	static int a = 10; // 오류 발생
    
    inline static int a = 10; // 오류X cpp 초기화X
    
}

constexpr

class Test
{
	static int a;
	constexpr int a = 10;
    
    static constexpr int a = 10;
    
}

static

class Test
{
	static int a;
}

int Test::a = 10;

Test::a = 20; // 가능
  • 모든 객체가 하나의 x를 공유
  • 런타임에 값 변경 가능
  • 별도 정의 필요 (C++17 이전 기준)

constexpr

class Test
{
	constexpr int a = 10;
}


Test::a = 20; // 불가능
  • 컴파일 타임에 값 확정
  • 암묵적으로 const
  • 변경 불가
  • 함수에도 적용 가능 (constexpr function)

static constexpr

클래스에 속한 컴파일 타임 상수

  • static > 클래스 전체에서 공유
  • constexpr > 컴파일 타임 상수

1. 컴파일 타임 값

class Test
{
	static constexpr int a = 10;
}

int array[Test::a];

컴파일 타임에 배열의 크기 요구시 static만으로는 불가능(런타임 초기화 해야하기 때문)

2. 헤더에서 안전하게 정의

class Test
{
	static constexpr int a = 10;
}

ODR문제 X
별도의 cpp 필요X

ODR?

One Definition Rule

inline static vs static constexpr

항목inline staticstatic constexpr
변경 가능OX
컴파일 타임 상수XO
메모리있음거의 없음
용도상태값상수
profile
이것 저것 다해보는 삶

0개의 댓글