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