const

const를 붙여 선언하면 컴파일러가 사용상의 에러를 잡아내는 데 도움을 준다. const는 어떤 유효범위에 있는 객체에도 붙을 수 있으며, 함수 매개변수, 반환 타입에도 붙을 수 있고 멤버 함수에도 붙을 수 있다. 컴파일러 쪽에서 보면 비트수준 상수성을 지켜야 하지만, 프로그래머는 논리적인 상수성을 사용하여 프로그래밍해야 한다. 상수 멤버 및 비상수 멤버 함수가 기능적으로 서로 똑같게 구현되어 있을 경우 코드 중복을 피해야 한다. 이때 비상수 버전이 상수 버전을 호출하도록 만들어라 const const는 '의미적인 제약'을 소스 코드 수준에서 붙인다. 또한, 컴파일러가 이 제약을 단단히 지켜준다. const는 다양하게 활용할 수 있다. 클래스 바깥에서는 전역 혹은 네임스페이스 유효범위의 상수를 선언하는..
상수를 쓸 때는, #define보다는 const, enum을 우선으로 함수처럼 쓰이는 매크로는 #define 매크로보다 inline함수를 우선으로 #define 대신 const, enum, inline #define ASPECT_RATIO 1.653이라고 상수를 정의했다고 치자. 우리에게는 ASPECT_RATIO라는 기호식 이름(symbolic name)으로 보이지만 컴파일러는 전혀 알 수 없다. 소스 코드가 컴파일러에게 넘어가기 전에 전처리 단계에서 숫자 상수로 바꾸어버린다. 그 결과, ASPECT_RATIO는 기호 테이블에 들어가지 않고 1.653이라는 숫자로 들어가게 된다. 따라서, 우리는 에러를 보면 ASPECT_RATIO는 이름은 찾아볼 수 없다. 이러한 문제를 매크로대신 상수(const)를 사..