▶ 상수란?
ㆍ 변수와 달리 저장된 데이터를 변경할 수 없는 공간에 할당된 수를 의미한다.
ㆍ 상수는 한번 데이터를 저장하고 나면 변경하는 것이 일반적으로는 불가능하다.
▶ c / c++언어 상수의 종류
1. 리터널상수
ㆍ 이름이 없는 상수를 말한다.
ㆍ 프로그램 코드에서 직접 사용되는 고정된 값을 말한다.
2. 심볼릭 상수
ㆍ 이름이 있는 상수를 말한다.
ㆍ 특정 값을 가진
이름이 붙은 상수. C++에서는 const키워드나 #define 전처리기를 사용하여 심볼릭 상수를 만들 수 있다.
▶ const 키워드란?
ㆍ 상수를 정의하는데 사용되는 키워드로 const로 선언된 변수는 한 번 초기화 하면 그 값을 변경할 수 없다.
ㆍ const는 함수 매개변수와 return 타입에도 사용 될 수 있으며 해당 값이 함수 내에서 변경되지 않음을 보장한다.
ㆍ getValue() 메서드에 const 키워드가 붙어 있으므로 이 메서드 내에서 myValue 값을 바꿀수 없다고 컴파일러에게 알려준다.
※ 느낀점 : c++에서 const키워드는 프로그램의 안정성과 유지보수성을 높여주는거 같다.
▶ constexpr 키워드란?
ㆍ c++11 에서 도입된 키워드로, 컴파일 타임에 상수 표현식을 계산할 수 있음을 나타낸다.
ㆍ 성능 최적화를 위한 중요한 기능으로 이 키워드를 사용하면 런타임이 아닌 컴파일타임에 연산이 수행되므로
실행 시간을 줄일 수 있다.
ㆍ constexpr 키워드는 변수나 함수 모두에 사용될 수 있다
ㆍ constexpr변수 : 이 변수의 값은 컴파일 타임에 알려져야 하며 상수이다.
ㆍ constexpr함수 : 이 함수는 주어진 인자들이 모두 컴파일 타임 상수일 때 컴파일 타임에 실행될 수 있다.
ㆍ 위 코드에서 square(10) 은 컴파일 시점에 계산되므로 결과인 100은 프로그램 코드 내부에서 직접 사용되는 리터럴 상수와 같아진다.
ㆍ C++14 부터는 constexpr 함수가 조건문, 반복문등을 포함할수 있게 되었고 C++17부터는 람다식도 포함할 수 있게되었다.
ㆍ C++20부터는 consteval이라는 새로운 키워드가 도입되었으며, 해당 함수가 항상 컴파일시점에서만 실행됨을 보장한다고 한다.
※ 추가로 c#에서는 readonly 라는 상수화 키워드를 사용한다.
▶ const 키워드와 constexpr 키워드의 차이점
1. 초기화 시점
ㆍ const 변수는 런타임에 초기화 될 수 있지만, constexpr변수는 반드시 컴파일 타임에 초기화 되어야 한다.
2. 오류 발견 시기
ㆍ const변수의 오류는 런타임에 발견되지만 constexpr 변수의 오류는 컴파일 타임에 발견된다.
3. 변경 가능성
ㆍ 일반적으로 const와 constexpr 모두 한 번 선언된 후 값을 변경할 수 없다
ㆍ 하지만 c++에서 const포인터를 사용할 때 포인터를 통해 가리키는 값은 바꿀 수 있다.
ㆍ 단. 포인터 자체가 const로 선언된 경우엔 값을 바꿀 수 없다
ㆍ 반만 constexpr은 어떠한 경우라도 값을 변경할 수 없다.
4. 함수에서의 사용
ㆍ const 함수는 클래스 맴버 변수를 수정하지 않음을 나타낸다
ㆍ constexpr 함수는 컴파일 타임 상수를 반환함을 나타낸다.
5. 추가로 기억해야 할 것
ㆍ 모든 constexpr변수나 함수는 const이지만 그 반대는 성립하지 않는다.
ㆍ constexpr은 주로 컴파일 타임 계산 최적화를 위해 사용된다.
'C++프로그래밍 > C 와 C++ 기초실습' 카테고리의 다른 글
컴파일 과정과 전처리기 (0) | 2023.10.09 |
---|---|
변수와 상수 영역과 Lifecycle (0) | 2023.10.09 |
함수 (1) | 2023.10.09 |
조건문 (1) | 2023.10.09 |
반복문과 출력 (1) | 2023.10.09 |