개념
- const는 일단 한번 값이 정해지면 그 때 이후로 값을 변경하려고 하면 룰 위반이라고 보기 위해 에러를 발생시키는 구문이다.
- constexpr은 const 기능 + 컴파일 시점에 값이 정해져야 한다는 것을 명시하기 위한 구문이다.
다음의 예시를 보면 이해가 빠를 것이다.
예시
#include <iostream>
int main(void) {
int x = 0;
cin >> x;
const int a = x; // OK!
constexpr int b = x; // Error!
a = 10; // Error!
b = 20; // Error!
return 0;
}
- const는 일단 한번 값이 정해지면 그 때 이후로 값 변경이 불가하다는 뜻
const int a = x;이 부분에서는 값이 정해지는 부분이기에 에러가 나지 않음a = 10;이 부분에서는 const로 값이 정해진 상태에서 변경하려고 하기 때문에 에러가 발생
- constexpr은 컴파일하는 시점에 값이 뭔지 알 수 없으면 에러를 발생시키기 위함
constexpr int b = x이 부분에서는 컴파일하는 시점에 x 값이 어떤 값이 들어올지 알 수가 없어서 에러가 발생b = 20;이 부분에서는 const와 마찬가지로 한번 정해진 값이 변경되려고 하는 것이기 때문에 에러가 발생