>백엔드 개발 >C++ >C `constexpr if-else` 체인에서 `else` 절이 실행되지 않도록 하려면 어떻게 해야 합니까?

C `constexpr if-else` 체인에서 `else` 절이 실행되지 않도록 하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-27 11:10:09669검색

How Can I Ensure No `else` Clause is Ever Executed in a C   `constexpr if-else` Chain?

Constexpr If-Else 절의 불이행 방지

C에서는 모든 constexpr if 조건이 if-else 문이 충족됩니다. 그러한 주장이 없으면 else 절이 예기치 않게 취해질 수 있습니다.

다음 코드를 고려하십시오.

if constexpr(condition1){
    ...
} else if constexpr (condition2) {
   ....
} else if constexpr (condition3) {
  ....
} else {
    // I want the else clause never taken. But I heard the code below is not allowed
    static_assert(false);
}

모든 조건이 상호 일치해야 하므로 else 절은 절대 채택되지 않을 것이라고 가정할 수도 있습니다. 독점적인. 그러나 C 표준에 따르면 이러한 단언은 허용되지 않습니다.

해결 방법: 템플릿 종속성

else 절이 사용되는 것을 방지하려면 다음을 만들어야 합니다. 템플릿 매개변수에 따라 삭제된 문입니다. 이는 다음 코드를 사용하여 달성할 수 있습니다.

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 표준에서는 유효한 전문화를 생성할 수 없는 경우 프로그램이 잘못된 형식이라고 명시합니다. 템플릿 또는 템플릿 내의 하위 설명입니다. 삭제된 문을 템플릿 매개변수에 종속되게 만듦으로써 컴파일러는 조건이 충족되지 않을 때 유효한 특수화가 생성되지 않도록 보장하여 else 절이 사용되는 것을 효과적으로 방지할 수 있습니다.

위 내용은 C `constexpr if-else` 체인에서 `else` 절이 실행되지 않도록 하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.