>백엔드 개발 >C++ >내 C 11 표현식은 `consexpr`입니까?

내 C 11 표현식은 `consexpr`입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-02 20:32:15121검색

Is My C  11 Expression a `constexpr`?

C 11에서 상수 표현식 감지

C 11에서는 실행하는 동안 표현식이 상수 표현식(constexpr)인지 판별할 수 있습니다. 코드를 최적화하고 특정 내용을 보장하는 데 도움이 될 수 있는 컴파일

noException(makeprval(e)) 사용

식이 상수 표현식인지 확인하는 한 가지 방법은 다음 매크로를 사용하는 것입니다.

#define isprvalconstexpr(e) noexcept(makeprval(e))

여기서 makeprval은 표현식에 대한 참조를 입력으로 사용하고 동일한 prvalue를 반환하는 템플릿 함수입니다. type.

설명

e에 non-throw 함수 호출과 같이 상수 표현식에서 허용되지 않는 특정 연산이 포함된 경우 noException(e) 표현식은 false를 반환합니다. throw 표현식 및 throw 가능한 동적 캐스트 또는 typeid입니다. makeprval에 대한 호출이 상수 표현식이 아닌 경우 noException 표현식도 false를 반환합니다.

제한 사항

isprvalconstexpr은 일반적으로 prvalue 상수 표현식을 감지하는 데 효과적이지만 미묘한 한계가 있습니다. 식이 상수 표현식이지만 상수 표현식에서 허용되지 않는 잠재적으로 평가된 하위 표현식이 포함된 경우 거짓 부정을 제공할 수 있습니다.

사용 예

다음 예 isprvalconstexpr의 사용법을 보여줍니다:

constexpr int a = (0 ? throw "fooled!" : 42);
constexpr bool atest = isprvalconstexpr((0 ? throw "fooled!" : 42));

이 예에서 표현식(0 ? throw "fooled!" : 42)는 a의 초기화가 성공하더라도 상수 표현식이 아닙니다. 이는 "사악한" 상수가 아닌 하위 표현이 "fooled!"를 던지기 때문입니다. 이 특정 사례에서는 실제로 평가되지 않더라도 잠재적으로 평가됩니다.

위 내용은 내 C 11 표현식은 `consexpr`입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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