상수의 개념
상수(Constant)는 프로그램 실행 중 그 값이 변하지 않는 데이터를 의미합니다.
상수를 사용하면 코드의 가독성을 높이고, 의도치 않은 값 변경을 방지할 수 있습니다.
const 키워드
C++에서는 const
키워드를 사용하여 변수를 상수로 선언할 수 있습니다.
const
변수는 선언과 동시에 초기화해야 하며, 이후에 값을 변경할 수 없습니다.
함수 매개변수에서도 const
를 사용할 수 있습니다.
이 경우, 함수 내에서 arr
의 요소를 변경할 수 없습니다.
constexpr 키워드 (C++ 11)
C++11에서 도입된 constexpr
키워드는 컴파일 시간 상수를 정의합니다.
constexpr
함수는 컴파일 시간에 평가될 수 있어야 합니다.
리터럴의 개념
리터럴(Literal)은 소스 코드에 직접 표현된 값을 의미합니다.
정수 리터럴
- 10진수 : 42
- 8진수 : 052 (0으로 시작)
- 16진수 : 0x2A (0x로 시작)
- 2진수 (C++ 14) : 0b101010 (0b로 시작)
정수 리터럴의 타입 지정
부동소수점 리터럴
- 소수점 표기 : 3.14
- 지수 표기 : 3.14e-2 (3.14 × 10^-2)
문자 및 문자열 리터럴
- 문자 리터럴 :
'A'
, '\n'
, '\x41'
- 문자열 리터럴 :
"Hello, World!"
- Raw 문자열 (C++ 11) :
R"(String with "quotes")"
불리언 리터럴
C++에서는 true
와 false
를 사용합니다.
널 포인터 리터럴
C++11부터는 nullptr
을 사용하여 널 포인터를 표현합니다.
사용자 정의 리터럴 (C++ 11)
C++ 11부터는 사용자가 직접 리터럴을 정의할 수 있습니다.
실습
- 다양한 타입의 상수 선언 및 사용
- 리터럴 타입 접미사 활용
- constexpr 함수 작성 및 사용
주의사항
1. const
와 #define
의 차이
const
는 타입 체크를 수행하지만, #define
은 단순 텍스트 치환
const
는 디버깅 시 더 유용함
2. constexpr
의 제약 사항
constexpr
함수는 순수 함수여야 함 (부작용 없음)
- 컴파일 시간에 평가 가능해야 함
연습 문제
- 원의 넓이와 둘레를 계산하는 프로그램을 작성하세요.
PI
값은 constexpr
을 사용하여 선언하세요.
- 다음 코드의 출력 결과를 예측해보세요.
- 섭씨 온도를 화씨 온도로 변환하는
constexpr
함수를 작성하세요.
참고자료