● noexcept
1. 함수 인터페이스의 일부, 이는 호출자가 noexcept여부에 의존할 수 있음을 뜻한다
2. noexcept 함수는 비 noexcept함수보다 최적화의 여지가 크다
3. noexcept는 이동 연산들과 swap, 메모리 해제 함수들, 그리고 소멸자들에 특히 유용
4. 대부분의 함수는 noexcept가 아니라 예외에 중립
※ noexcept은 강한 예외 보장을 하는데 이동 연산시 예외 보장이 안될 경우 복사를 진행하므로 이동 연산의 이점을 제대로 활용하고자하면 이동 생성자에 예외보장(noexcept)을 선언해줘야한다.
● constexpr
1. constexpr 객체는 const이며, 컴파일 도중에 알려지는 값들로 초기화 된다 : 상수가 된다는 뜻
2. constexpr 함수는 그 값이 컴파일 도중에 알려지는 인수들로 호출하는 경우에는 컴파일 시점 결과를 산출
: 실행시점에 동작하는게 아니므로 컴파일 시점 때 산출한 결과를 통해 최적화를 진행
3. constexpr 객체나 함수는 비 constexpr객체나 함수보다 광범위한 문맥에서 사용가능
4. constexpr은 객체나 함수의 인터페이스의 일부
※ const와 constexpr의 주요차이점
const는 초기화를 런타임까지 지연시킬 수 있으나 constexpr변수는 반드시 컴파일 타임에 초기화가 되어 있어야한다
※ constexpr을 함수반환값에 사용할 때는
1. 가상으로 재정의된 함수가 아니어야한다.
2. 반환값은 반드시 리터럴 타입이어야한다
※ 함수에 constexpr을 붙일 경우 inline을 암시
: 가능하다면 컴파일 타임에 실행을 요청하나 상황에 따라 런타임에 실행요청(inline 함수도 동일)
'C++' 카테고리의 다른 글
std::unique_ptr & std::shared_ptr & std::weak_ptr (0) | 2023.09.28 |
---|---|
explicit & 특수 멤버 함수 (0) | 2023.09.28 |
enum/enum class (0) | 2023.09.28 |
별칭 선언(using) (0) | 2023.09.28 |
auto & 중괄호 초기화 & nullptr (0) | 2023.09.28 |