#define은 전처리기가 처리(즉, 그냥 문자그대로 바꿔치기) . 따라서 디버깅 할때 심볼이 따로 안잡힘. 디버깅 어려움
사용성에서 const int는 제약이 생길수도. 배열크기 초기화, switch문 인덱스값 등에 사용할 수 없을 수 있음.
대체로 enum 선호
C++에서 const int는 컴파일 타임에 그 값이 알려진 상수입니다. 그러나 모든 const int 값이 컴파일 타임 상수 (즉, 컴파일러가 컴파일 타임에 그 값을 알 수 있는 값)는 아닙니다.
예를 들어, 다음과 같은 코드를 고려해 보세요:
int a = 10; const int b = a;
여기서 b는 const int입니다. 그러나 b의 값은 실행 시간에 결정되기 때문에 컴파일 타임 상수가 아닙니다. 따라서 이런 상수는 배열의 인덱스나 switch 문의 케이스 레이블로 사용할 수 없습니다.
반면에:
const int c = 10;
여기서 c는 컴파일 타임에 그 값이 알려진 상수입니다. 이런 상수는 배열의 인덱스나 switch 문의 케이스 레이블로 사용할 수 있습니다. 결론적으로, const int를 배열의 인덱스나 switch 문의 케이스 레이블로 사용하려면 그 값이 컴파일 타임에 알려져 있어야 합니다. 이를 위해 C++11에서는 constexpr 키워드를 도입하여 컴파일 타임에 평가되는 상수를 명확히 나타낼 수 있게 되었습니다. 따라서 가능한 한 constexpr를 사용하여 이러한 상황에서의 의도를 명확히 표현하는 것이 좋습니다.