수색…


통사론

  • static_assert ( bool_constexpr , message )
  • static_assert ( bool_constexpr ) / * C ++ 이후 * 17 * /

매개 변수

매개 변수 세부
bool_constexpr 확인할 식
메시지 bool_constexprfalse 일 때 인쇄 할 메시지

비고

런타임 어설 션 과 달리 정적 어설 션은 컴파일 타임에 검사되며 최적화 된 빌드를 컴파일 할 때 적용됩니다.

static_assert

어설 션은 조건을 검사해야하며 거짓이라면 오류입니다. static_assert() 에서는 컴파일 타임에 완료됩니다.

template<typename T>
T mul10(const T t)
{
    static_assert( std::is_integral<T>::value, "mul10() only works for integral types" );
    return (t << 3) + (t << 1);
}

static_assert() 에는 필수 첫 번째 매개 변수 인 bool constexpr 인 조건이 있습니다. 문자열 리터럴 인 두 번째 매개 변수 인 메시지 가있을 수 있습니다. C ++ 17에서 두 번째 매개 변수는 선택적입니다. 그 전에는 필수적입니다.

C ++ 17
template<typename T>
T mul10(const T t)
{
    static_assert(std::is_integral<T>::value);
    return (t << 3) + (t << 1);
}

다음과 같은 경우에 사용됩니다.

  • 일반적으로 constexpr 값의 일부 유형에는 컴파일시 확인이 필요합니다
  • 템플릿 함수는 전달 된 유형의 특정 속성을 확인해야합니다.
  • 다음과 같은 테스트 사례를 작성하려고합니다.
    • 템플릿 메타 함수
    • constexpr 함수
    • 매크로 메타 프로그래밍
  • 특정 정의가 필요함 (예 : C ++ 버전)
  • 레거시 코드 포팅, sizeof(T) 에 대한 어설 션 (예 : 32 비트 int)
  • 프로그램이 작동하려면 특정 컴파일러 기능이 필요합니다 (패킹, 빈 기본 클래스 최적화 등)

static_assert()SFINAE에 참여하지 않으므로 추가 오버로드 / 특수화가 가능하면 템플릿 메타 프로그래밍 기법 (예 std::enable_if<> ) 대신 사용해야합니다. 예상되는 과부하 / 전문화가 이미 발견되었지만 추가 검증이 필요한 경우 템플릿 코드에서 사용할 수 있습니다. 이러한 경우 SFINAE에 의존하는 것보다 더 구체적인 오류 메시지를 제공 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow