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
}
class Test
{
static int a;
constexpr int a = 10;
static constexpr int a = 10;
}
class Test
{
static int a;
}
int Test::a = 10;
Test::a = 20; // 가능
class Test
{
constexpr int a = 10;
}
Test::a = 20; // 불가능
클래스에 속한 컴파일 타임 상수
class Test
{
static constexpr int a = 10;
}
int array[Test::a];
컴파일 타임에 배열의 크기 요구시 static만으로는 불가능(런타임 초기화 해야하기 때문)
class Test
{
static constexpr int a = 10;
}
ODR문제 X
별도의 cpp 필요X
One Definition Rule
| 항목 | inline static | static constexpr |
|---|---|---|
| 변경 가능 | O | X |
| 컴파일 타임 상수 | X | O |
| 메모리 | 있음 | 거의 없음 |
| 용도 | 상태값 | 상수 |