관리 메뉴

기억을 위한 기록들

[CPP] const와 constexpr 본문

C & CPP

[CPP] const와 constexpr

에드윈H 2022. 5. 25. 21:05

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;
}