독점적인 Constexpr if-else 경로 보장
constexpr if-else 절에서는 else 사례가 절대 사용되지 않도록 하는 것이 중요합니다. 전통적으로 static_assert(false)를 사용할 수 있습니다. 이러한 경우 오류를 발생시킵니다. 그러나 이 접근 방식은 예기치 않게 명령문을 true로 주장하는 컴파일 오류를 발생시킵니다.
대신 else 케이스에 접근할 수 없도록 강제하려면 삭제된 명령문을 템플릿 매개변수에 종속시켜야 합니다. 이는 템플릿 인수에 관계없이 std::false_type을 반환하는 Always_false 템플릿을 사용하여 달성할 수 있습니다.
template <class... T> constexpr std::false_type always_false{}; if constexpr (condition1) { // ... } else if constexpr (condition2) { // ... } else if constexpr (condition3) { // ... } else { static_assert(always_false<T...>); }
이 솔루션은 C에서 그렇지 않은 경우 프로그램이 잘못된 형식으로 간주된다는 사실을 기반으로 합니다. 템플릿이나 constexpr if-else 하위 문에 대해 유효한 특수화가 생성될 수 있습니다. 따라서 else 절에 접근할 수 없게 되면 컴파일러는 컴파일 오류를 발생시켜 코드가 유효한지 확인합니다.
위 내용은 C에서 독점 Constexpr if-else 경로를 어떻게 보장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!