const
const란?
변수를 상수화 하기 위해 사용한다.
프로그래머의 실수를 막기 위해 사용
변수 앞에 const 키워드를 붙이고 변수를 선언하면 해당 변수는 값 변경이 불가능하다
또 선언과 동시에 초기화를 시켜줘야 한다
다음은 포인터 변수를 사용할때 3가 방식이 있다
1. const가 타입(int,bool,float ...) 앞에 붙어있을 경우 포인터 변수가 가리키고 있는 값 변경 불가능
2. const가 변수 앞에 붙어있을 경우 포인터 변수의 주소 값을 변경하지 못함
3. const가 타입 앞에도 붙어있고 변수 뒤에도 붙어있을 경우 주소 값, 주소가 가리키는 값 변경 불가능
함수에서의 const 사용은 3가지 용도로 사용하는데
1. 매개변수 자료형
2. 함수 선언
3. 함수 리턴 자료형
const 와 비슷한 constexpr
C++ 11부터 지원되는 한정자 constexpr 는 일반화된 상수 표현식을 사용할 수 있게 해주며 일반화된 상수 표현식을 통해 변수나 함수에 생성자 함수에 대한 컴파일 타임에 평가될 수 있도록 처리해 줄 수 있다.
C++ 17부터는 람다 함수에도 constexpr 키워드를 사용할 수 있다.
const와 constexpr의 중요 차이점은 const 변수의 초기화를 런타임까지 지연시킬 수 있는 반면 constexpr 변수는
반드시 컴파일 타임에 지정해야 한다.
#define과 const
#define은 빌드과정중 전처리기 단계에서 말그대로 치환을 해버린다
사용자에게는 PI라는 기호식 이름(Symbolic Name)으로 보이지만 컴파일단계로 넘어갔을 경우에
컴파일러에게는 그저 숫자에 불과하다 따라서 컴파일러가 쓰는 기호 테이블에 들어가지 않는다
※기호 테이블 : 유형,범위,크기와 같은 메타데이터를 포함하여, 메모리에 있는 주소에 변수를 할당하는 이름의 매핑
이것은 컴파일러에 의해 사용된다
이러한 코드에서 만약 에러가 발생한다면 PI로 에러를 발생하는것이 아닌 에러메세지에는 3.141592가 나온다...
아직까지 경험에 보지못했지만 이러한 에러를 방지하기 위해서는 const를 쓰는것이 좋다...