Constexpr if-else 절이 발생하지 않는다고 주장
C에서는 모든 constexpr if 문에 최소한 하나의 진정한 가지. 조건 중 어느 것도 충족되지 않는 경우 예기치 않은 동작을 방지하기 위해 컴파일 시간 오류가 필요합니다.
일반적인 오해 중 하나는 else 절 내에 static_assert(false)를 사용하는 것입니다. 그러나 이 접근 방식은 컴파일러에서 허용되지 않습니다.
이 문제를 해결하기 위한 해결책은 삭제된 문을 템플릿 매개 변수에 종속되게 만드는 것입니다. constexpr std::false_type 클래스를 도입하고 이를 템플릿 매개변수 T로 특수화함으로써 항상 false로 평가되는 조건을 생성할 수 있습니다.
예는 다음과 같습니다.
template <class... T> constexpr std::false_type always_false{}; if constexpr (condition1) { ... } else if constexpr (condition2) { ... } else if constexpr (condition3) { ... } else { // Always false condition static_assert(always_false<T>); }
에 따르면 C 표준, 섹션 [temp.res]/8(템플릿 또는 constexpr if 문의 하위 설명에 대해 유효한 특수화가 생성될 수 없는 경우) 템플릿을 사용하면 프로그램이 잘못된 형식으로 간주됩니다. 이는 else 절이 절대 사용되지 않고 컴파일 시간 오류가 발생하는 것을 효과적으로 보장합니다.
위 내용은 C Constexpr if-else 문에서 처리되지 않은 사례에 대한 컴파일 시간 오류를 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!