const
const의 뜻, const 변수와 매개변수, constexpr
11장 - const
1) const란?
상수를 의미하는 ‘constant’의 줄임말로, 변경해서는 아뇌는 대상을 선언할 때 사용한다.
2) const 변수와 매개변수
const는 전역변수, 클래스 멤버 등 모든 종류의 변수에 붙일 수 있다. 포인터에도 붙일 수 있는데, 포인터 자체에 붙일 것인지 포인터가 가리키는 값에 붙일 것인지 확실히 해야한다.
const가 여러개 붙어서 의미를 파악하기 어렵다면, 오른쪽에서 왼쪽으로 읽어보자. int* const ip
라면 ip는 int포인터에 대해 const를 적용한 것이라고 이해하는 것이다.
-
가리키는 값에 const
const int* ip; int const* ip; ip = new int[10]; ip[3] = 5; // 에러 발생!
-
포인터 자체에 const
int* const ip = nullptr; ip = new int[10]; // 에러 발생!
-
둘 다 const
int const* const ip = nullptr
가리키는 주소도, 해당 주소의 값도 변경할 수 없다.
참고로 레퍼런스에도 const를 붙일 수 있다. 심지어 레퍼런스에 대한 레퍼런스는 생성이 불가하기에 참조 단계가 한 단계 뿐이다. const int& ref = z
와 같이 사용하며, 변수의 값을 변경하지 못하는 조건으로 매개변수를 넘기는데 유용하다.
3) constexpr 키워드
상수 표현식을 나타낸다. 상수 표현식은 컴파일 시간에 계산되는 표현식이다.
constexpr int getArraySize(){ return 32 };
int main(){
int myArray[getArraySize()]; // constexpr이 아닌 const였으면 에러!
return 0;
}
미리 계산되는 만큼 제약사항이 많다.