다음을 통해 공유


static_assert

컴파일 타임에는 소프트웨어 설정을 테스트합니다.상수 식이 지정 된 경우 false, 컴파일러는 지정 된 메시지를 표시 하 고 컴파일하는입니다; 오류와 함께 실패 그렇지 않으면 선언 해도 효과가 없습니다.

static_assert( 
    constant-expression, 
    string-literal 
);

매개 변수

Parameter

설명

constant-expression

부울으로 변환할 수 있는 정수 상수 식입니다.

계산된 된 식이 0 이면 (false)를 string-literal 매개 변수를 표시 하는 컴파일 오류와 함께 실패 합니다.식이 0이 아닌 (true) 인 경우는 static_assert 선언 된 적용 되지 않습니다.

string-literal

경우 표시 되는 메시지는 constant-expression 매개 변수가 0입니다.메시지 문자열의 문자 수는 기본 문자 집합 컴파일러입니다. 즉, 하지 멀티 바이트 또는 와이드 문자.

설명

constant-expression 의 매개 변수는 static_assert 선언 나타냅니다는 소프트웨어 어설션을.소프트웨어 설정 프로그램은 특정 시점에 조건을 지정 합니다.조건이 true 인 경우는 static_assert 선언 된 적용 되지 않습니다.조건이 false 이면 어설션이 실패, 컴파일러는... string-literal , 매개 변수 및 컴파일 실패 오류가 있습니다.

static_assert 테스트는 소프트웨어 어설션 컴파일 타임에 선언 합니다.반면에 assert (CRT) 매크로 테스트는 소프트웨어 어설션을 실행 시간 및 공간이 나 시간에 런타임 비용이 발생 합니다.static_assert 선언 템플릿 인수에 포함 될 수 있으므로 서식 파일을 디버깅 하는 데 특히 유용할 수 있는 constant-expression 매개 변수.

컴파일러 검사 하는 static_assert 선언 발생 하면 구문 오류에 대 한 선언입니다.컴파일러를 계산에서 constant-expression 즉시에 템플릿 매개 변수를 종속 되지 않는 경우 매개 변수입니다.그렇지 않으면 컴파일러를 계산에서 constant-expression 템플릿이 인스턴스화될 때 매개 변수입니다.따라서 컴파일러 진단 메시지 한 번 때 발생 될 수 있습니다 선언을 도달 하 고 다시는 템플릿이 때 시작 합니다.

사용할 수 있는 static_assert 키워드 네임 스페이스, 클래스, 또는 블록 범위입니다.(해당 static_assert 키워드 네임 스페이스 범위에서 사용할 수 없기 때문에 새 이름을 프로그램에 사용 하지 않습니다 경우에 기술적으로 선언입니다.)

설명

다음 예제에서는 static_assert 선언에 있는 네임 스페이스의 범위입니다.입력 크기는 컴파일러를 알고 있기 때문에 void *, 식이 바로 계산 됩니다.

예제

static_assert(sizeof(void *) == 4, "64-bit code generation is not supported.");

설명

다음 예제에서는 static_assert 선언은 클래스 범위.static_assert 템플릿 매개 변수가 있는지 확인은 일반 이전 데이터 (POD) 형식입니다.컴파일러 검사 하는 static_assert 선언, 하지만 계산 되지 않습니다 선언은 constant-expression 때까지 매개 변수는 basic_string 에 클래스 템플릿이 인스턴스화될 main().

예제

#include <type_traits>
#include <iosfwd>
namespace std {
template <class CharT, class Traits = std::char_traits<CharT> >
class basic_string {
    static_assert(tr1::is_pod<CharT>::value,
                  "Template argument CharT must be a POD type in class template basic_string");
    // ...
    };
}
struct NonPOD {
    NonPOD(const NonPOD &) {}
    virtual ~NonPOD() {}
};
int main()
{
    std::basic_string<char> bs;
}

설명

다음 예제에서는 static_assert 선언 블록 범위에 있는.static_assert VMPage 구조체의 크기를 시스템의 가상 메모리가 pagesize와 같은 인지 확인 합니다.

예제

#include <sys/param.h> // defines PAGESIZE
class VMMClient {
public:
    struct VMPage { // ... 
           };
    int check_pagesize() {
    static_assert(sizeof(VMPage) == PAGESIZE,
        "Struct VMPage must be the same size as a system virtual memory page.");
    // ...
    }
// ...
};

참고 항목

참조

어설션 및 사용자가 제공한 메시지 (C++)

# error 지시문 (C/C++)

assert (CRT)

ASCII 문자 집합입니다.

선언

기타 리소스

서식 파일