728x90
constexpr
- C++11에 constexpr 이라는 키워드가 추가되었다.
- constexpr은 변수 또는 함수의 값을 컴파일 시점에 도출하여 상수화 시켜주는 아주 강력한 기능이다.
- 컴파일 시점에 상수로 처리되기 때문에 switch case 문에서도 상수로 취급된다.
constexpr을 함수에 사용할 때 제약사항
- constexpr을 사용하는 데 있어서 몇 가지 제약사항이 있다.
- 반환값이 무조건 Literal Type이어야 한다.
- virtual로 재정의된 함수가 아니어야 한다.
- 재귀 함수로 사용될 수 있다.
- 함수에 constexpr을 붙일 경우 inline을 암시한다.
- C++11 에서는 함수 본문에 지역변수를 둘 수 없고, 하나의 return 구문만 있어야 했다.
- 위 제약은 C++14에서 사라졌다.
구현 예시
- 25206 너의 평점은
#include <bits/stdc++.h>
using namespace std;
constexpr unsigned int Hash(const char* str)
{
return str[0] ? static_cast<unsigned int>(str[0]) + 0xEDB8832Full * Hash(str + 1) : 8603;
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
char grade[50];
string subject;
float my_grade,sum_grade=0,major_GPA=0;
for (int i = 0; i < 20; ++i)
{
cin >> subject >> my_grade >> grade;
switch (Hash(grade))
{
case Hash("A+"):
sum_grade += my_grade;
major_GPA += my_grade * 4.5;
break;
case Hash("A0"):
sum_grade += my_grade;
major_GPA += my_grade * 4.0;
break;
case Hash("B+"):
sum_grade += my_grade;
major_GPA += my_grade * 3.5;
break;
case Hash("B0"):
sum_grade += my_grade;
major_GPA += my_grade * 3.0;
break;
case Hash("C+"):
sum_grade += my_grade;
major_GPA += my_grade * 2.5;
break;
case Hash("C0"):
sum_grade += my_grade;
major_GPA += my_grade * 2.0;
break;
case Hash("D+"):
sum_grade += my_grade;
major_GPA += my_grade * 1.5;
break;
case Hash("D0"):
sum_grade += my_grade;
major_GPA += my_grade * 1.0;
break;
case Hash("F"):
sum_grade += my_grade;
major_GPA += my_grade * 0.0;
break;
case Hash("P"):
break;
default:
break;
}
}
cout << major_GPA/sum_grade;
return 0;
}
728x90
'언어 > C++' 카테고리의 다른 글
정렬Sort() (0) | 2024.02.21 |
---|---|
입력함수 : cin(), getline() and cin.ignore() (0) | 2024.02.21 |
String::find() 문자열에서 특수 문자 찾기 (1) | 2024.02.17 |
삼항 연산자 (0) | 2024.02.14 |
Vector Container (0) | 2024.02.14 |