[The C++ Programming Language에서 발췌] constexpr은 대략 '컴파일 타임에 평가될 예정'이라는 의미다. 이것은 주로 상수를 지정하는 데 사용되며, 데이터가 읽기 전용 메모리내에 저장되도록 해주고 성능을 높여준다. 다음의 예를 살펴보자. 123456789const int dmv = 17; // dmv는 이름을 가진 상수int var = 17; // var는 상수가 아니다.constexpr double max1 = 1.4 * square(dmv); // square(17)이 상수 표현식인 경우 OKconstexpr double max2 = 1.4 * square(var); // 오류 : var는 상수 표현식이 아니다.const double max3 = 1.4 * square(v..
[The C++ Programming Language에서 발췌] C++는 표현식으로부터 타입을 추론하기 위해 두 가지의 매커니즘을 제공한다.● 초기화 식으로부터 객체의 타입을 추론하기 위한 auto로, 타입은 변수, const, constexpr의 타입이 될 수 있디.● 함수의 반환 타입이나 클래스 멤버의 타입 같이 간단한 초기화 식이 아닌 뭔가의 타입을 추론하기 위한 decltype(expr)이다.여기서 수행되는 추론은 매우 간단한다. 즉, auto와 decltype()은 컴파일러가 이미 알고 있는 표현식의 타입을 알려주기만 할 뿐이다. 1.1 auto 타입 지정자변수의 선먼문에 초기화 식이 있을 때는 타입을 명시적으로 지정할 필요가 없다. 대신 변수가 자신의 초기화 식에 해당하는 타입을 갖게 할 수 ..
[The C++ Programming Language에서 발췌] 어떤 객체의 초기화 식이 지정되면 해당 객체의 초기 값이 결정된다. 초기화 식은 4가지 문법 스타일 중 하나를 사용한다. 1234int a1 { 1 };int a2 = { 1 };int a3 = 1;int a4(1);cs 이들 중 첫 번째 항목만이 모든 상황에서 사용될 수 있으므로, 그것을 사용하기를 강력히 권장한다. 다른 후보들보다 좀 더 명확하며, 오류에 취약하지 않다. {}를 사용한 초기화, 리스트 초기화는 축소를 허용하지 않는다.● 정수는 자신의 값을 보관할 수 없는 또 다른 정수로 변환될 수 없다. 예를 들어 char에서 int로의 변환은 허용되지만, int에서 char는 허용되지 않는다.● 부동소수점 값은 자신의 값을 보관할 수 ..