매크로 상수
C언어에서는 매크로를 사용해서 상수를 정의할 때가 많았지만 C++에서는 아래의 이유 때문에 const, constexpr을 주로 사용한다.
- 디버깅이 힘들다
- #define은 파일 전체에 영향을 미치기 때문에 유연성이 떨어짐 (상수를 특정 스코프 안에서만 적용하고 싶을 수도 있음)
const
변경할 수 없는 상수를 선언할때 변수 이름 앞에 붙인다. cosnt는 타입 앞/뒤에 붙을 수 있다. 보통은타입 앞에 붙인다.
const로 선언한 값이 결정되는 시점은 컴파일 타임, 런타임이다.
const가 보장해주는 것은 프로그램 실행 중 값이 변경되지 않는다는 점이다
// 컴파일 타임에 값 결정
double const pi{ 3.14 };
const double gravity{ 9.8 };
// 런타임에 값 결정
int x;
cin >> x;
const int y(x);
const는 함수의 파라미터로 사용되기도 한다. 함수 파라미터 값이 실행 중에 변경되지 않는것을 보장하기 위해서다.
void printNumber(const int my_number)
{
cout << my_number << endl;
}
constexpr
컴파일 타임에 값이 결정되는 키워드이다.
constexpr int my_const(123);
const 관리 방법
const 상수를 헤더파일을 통해서 관리하면 관리에 용이하다.
const 전용 헤더 파일 MY_CONSTANTS.h 사용 예시
// MY_CONSTANTS.h
namespace constants
{
constexpr double pi(3.141592);
constexpr double moon_gravity(9.8 / 6.0);
}
// constants 헤더 파일 사용 예시
#include <iostream>
#include "MY_CONSTANTS.h";
using namespace std;
int main()
{
double radius;
cin >> radius;
double circumference = 2.0 * radius * constants::pi;
}