<개요> constexpr 키워드는 상수 식을 뜻하며, c++11에서 추가됐고 c++14에서 향상됐습니다. const 처럼 값을 변경하려고 할 시 컴파일러가 오류를 발생합니다. const 와는 달리, constexpr는 함수 및 클래스에서도 사용이 가능합니다. constexpr 는 template 의 인수 또는 배열의 사이즈를 정의할때 마다 사용이 가능합니다. 강한 열거형 (strongly - typed enum class) 는 기존의 열거형에서 스코프 연산자만을 사용해서 타입에 접근 가능한 열거형입니다. |
<constexpr> constexpr는 c++11 에서 추가된 키워드로서 컴파일 타임에 상수의 초깃값을 알 수있게 해주는 키워드 입니다. 일단 const 부터 확인하겠습니다.
위와 같이 사용자 입력이나 또는 인자로 들어오는 상수값은 그때마다 변하기 때문에 런타임 시간내에서만 파악이 가능하고, 이를 런타임 상수라고 합니다. 위의 예제에서 b와 value(const int _x) 의 _x는 런타임 상수입니다. 다음은 constexpr 입니다.
const 와 constexpr의 차이점은 const 변수는 런타임까지 지연시켜 초기화가 가능하지만, constexpr 변수는 컴파일 타임에 초기화시켜야 한다는 것입니다. 컴파일 타임에 상수를 사용한다면, 조금 더 빠르고 적은 메모리로 사용할 수 있으며 배열 및 template의 인자로 사용할 수 있습니다. (template은 컴파일 타임에 실행되기 때문에)
어떤 값의 2배를 arraysize로 사용하는 함수를 하나 만든다면, 이렇게 사용할 수 있는데 일반적인 arrayvalue 함수는 런타임시간내에 동작하기 때문에 컴파일시간내에 작동하는 배열 혹은 template의 인자로 사용될 수 없습니다. <constexpr의 규칙>
열거형은 정수 상수 집합으로 정의된 열거자의 집합입니다.
스코프가 있는 열거형은 enum class 이며 꼭, 스코프 연산자를 통해 접근해야 합니다. 1번의 enum A : int 는 enum A 와 같습니다.
열거형은 캐스팅을 통한 변환도 가능합니다.
다음은 사용자 정의 타입에 대한 내용인 explicit 와 = delete , = default , override 에 대해 작성하겠습니다. |