>백엔드 개발 >C++ >C Constexpr if-else 문에서 처리되지 않은 사례에 대한 컴파일 시간 오류를 보장하는 방법은 무엇입니까?

C Constexpr if-else 문에서 처리되지 않은 사례에 대한 컴파일 시간 오류를 보장하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-27 11:01:10501검색

How to Guarantee Compile-Time Errors for Unhandled Cases in C   Constexpr if-else Statements?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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