Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- moreeffectiveC++
- 알고리즘
- 언리얼엔진구조체
- BFS
- 자료구조
- map
- 람다사용정렬
- stl
- UML관련
- 언리얼가비지컬렉터
- UELOG
- UE4 커스텀로그
- 스마트포인터
- 람다
- C++
- 정렬알고리즘
- 약참조
- 애셋로드
- 정렬
- 강참조
- C++최적화
- UE_LOG
- 프로그래머스
- 선택정렬
- dataasset
- 델리게이트
- unorder_map
- 데이터애셋
- 크리티컬섹션
- enumasByue
Archives
- Today
- Total
기억을 위한 기록들
[CPP] const와 constexpr 본문
const는 상수화 시켜주는 키워드로
const int var = 5; //OK!
const int var2; //error!
var = 7 //error!
선언한 값을 바꾸지 못하며 초기화가 안되었다면 에러를 뿜어낸다. 하지만 이는 모두 런타임에서 확인하고 있으며,
컴파일 시간에서 확인할수 있게 추가된 constexpr이 C++11부터 지원되었다.
constexpr int var = 5; //OK!
constexpr int var2; //error!
var = 7 //error!
사용하는 측면에서 변수 앞에 붙이는데는 큰 차이는 체감하지 못한다.
함수에서 사용할때의 차이가 좀 있는데
1. 가상으로 오버라이딩된 함수가 아니여야한다.
2 반환 값은 반드시 LiteralType이여햔다.
3. 함수에 붙을경우 inline을 암시한다.(즉, 컴파일 타임에 평가되기때문에, inline함수들과 같이 컴파일 된다.)
그리고 C++11에서는 함수 본문에 지역변수를 둘수 없었고, 하나의 반환 표현식만 와야하는 제약이 있었으나, C++14부터는 이러한 제약이 사라졌다.
//C++11/14 모두 가능
constexpr int DoSomething()
{
return 5;
}
//C++11에서는 에러발생, C++14부터는 가능
constexpr int DoSomething()
{
int loc_var; //지역변수
//여러개의 반환문
if(loc_var==5)
return 1;
return 5;
}
'C & CPP' 카테고리의 다른 글
[CPP] 람다 표현식(Lambda Expression)이란? (Lambda 함수) (2) | 2022.12.05 |
---|---|
[CPP] std::stringstream에 관하여 (0) | 2022.06.06 |
[CPP] 함수 객체에 관하여 (0) | 2022.02.02 |
[CPP]std::function에 관하여 (0) | 2022.02.02 |
[CPP] using 과 typedef (0) | 2021.11.10 |