게임 개발 메모장
[ C++ ] const 와 constexpr 용법 본문
C++ const, constexpr
constexpr 이란
컴파일 시간 상수를 만드는 키워드
컴파일 시간에 결정되는 상수 값으로만 초기화 할 수 있다.
constexpr이 변수를 상수로 만들어 준다고 하는데 그럼 const와 똑같은데 무슨 차이가 있나?
상수에는 2가지 상수가 존재하는데
1. 컴파일 시간에 알 수 있는 상수.
2. 컴파일 시간에 알 수 없는 상수. (실행시간에 알 수 있는 실행시간 상수)
이렇게 두 종류의 상수가 존재한다.
컴파일 시간에 알 수 있는 상수를 컴파일 시간 상수 (compile-time constant)라고 하고,
컴파일 시간에 알 수 없는 상수 즉 실행시간에 알 수 있는 상수를
런타임 상수(runtime constant)라고 한다.
const는 컴파일 시간에 알 수 있는 상수와 컴파일 시간에 알 수 없는 상수
둘 다 사용할 수 있다.
반면 constexpr은 컴파일 시간에 알수 있는 컴파일 상수에서만
사용할 수 있다.
const가 constexpr를 포함한다고 생각 하면 된다.
컴파일 상수에는 constexpr을 사용하고 그 외의 상수에는
const를 사용하면 될 듯 하다.

이렇게 명확하게 숫자로 변수를 지정하는 num1, num3은 컴파일 시간 상수이고,
변수에 변수값을 대입하여 상수로 만드려는 num2, num4는 런타임 상수 이다.
constexpr은 컴파일 타임 상수에만 사용할 수 있으므로 num4에서 error가
발생하게 되는 것 이다.
정리를 하자면
constexpr, const는 둘다 상수를 만들어주는 키워드이지만
const는 컴파일 시간, 실행시간 상수 모두 만들수 있고,
constexpr은 컴파일 시간 상수만 만들 수 있습니다.
그러므로 변수값으로 const를 사용할 것이 아니라면, 더 명확한 constexpr을 사용하자.
참고
https://www.youtube.com/watch?v=dOgLE21s3ZY&list=WL&index=171
'언리얼 엔진 > C++' 카테고리의 다른 글
[ C++ ] operator 대입연산자 (1) | 2024.01.02 |
---|---|
[ C++ ] String 에 대해서 (0) | 2024.01.02 |
[ C++ ] 게임에서 동기와 비동기 예시 (0) | 2024.01.01 |
[ C++ ] TTuple (0) | 2023.12.30 |
[ C++ ] L-Value / R-Value 래퍼런스 (0) | 2023.12.29 |