다음 스위치는 enum 클래스의 모든 항목을 다루고 있기 때문에 기본 사례를 컴파일하는 이유는 무엇입니까? 처음에는 이것이 강한 이유가 있다고 생각했을 것입니다. enum class
.enum 클래스의 모든 항목을 전환 할 때 기본 사례 컴파일
나는 내가 모든 경우를 포함 것을 알면서도 기본 싶은 이유에 : 내 미래의 부주의 다움에 대한이 안전 가드 나 (그리고 다른 동료의)
enum class E {
a,
b
};
int main()
{
E c = E::b;
switch (c) {
case E::a:
case E::b:
std::cout << "pass" << std::endl;
break;
default:
static_assert(false, "This explodes!");
}
}
'static_assert'는 조건을 검사하고 다음과 같은 조건을 검사합니다. 기본 유형에 맞는 값으로 제한됩니다. 의존성이없고 거짓으로 평가되는 경우 파싱되는 즉시 실행됩니다. – Xeo
일부 컴파일러 (GCC)는 conf 열거의 모든 값에 대해 절을 지정하지 않은 기본 절이없는 switch 문이있는 경우 경고 및/또는 오류가 발생하지 않도록합니다. 이것은 미래의 개발자가 상응하는 'case'절을 추가하지 않고 'E'에 값을 추가하는 것을 막을 수 있습니다. 그것이 'c'가 'E'에서 열거 형 중 하나가 아닌 값을 갖는 경우를 포함하지 않는다고 인정합니다. –