Udostępnij za pośrednictwem


static_assert

Testy potwierdzenia oprogramowania w czasie kompilacji.Jeśli zostanie określone wyrażenie stałe false, kompilator Wyświetla określoną wiadomość i kompilacji zakończy się niepowodzeniem z błędem; w przeciwnym razie zgłoszenia nie ma wpływu.

static_assert( 
    constant-expression, 
    string-literal 
);

Parametry

Parametr

Opis

constant-expression

Integralną stałej wyrażenie, które mogą być konwertowane na wartość logiczną.

Jeśli wyrażenie oceniana jest równa zero (FAŁSZ), string-literal parametr jest wyświetlany i kompilacji zakończy się niepowodzeniem z błędem.Jeśli wyrażenie jest różna od zera (true), static_assert deklaracja nie ma wpływu.

string-literal

Komunikat, który jest wyświetlany, jeśli constant-expression parametru jest równa zero.Wiadomość jest ciąg znaków w zestaw podstawowy znaków kompilatora; oznacza to, że nie znaków wielobajtowych lub szerokie,.

Uwagi

constant-expression Parametr static_assert reprezentuje deklaracji potwierdzenia software.Potwierdzenia oprogramowania określa warunek, które mają być spełnione w określonym miejscu w programie.Jeśli warunek jest prawdziwy, static_assert deklaracja nie ma wpływu.Jeśli warunek nie jest spełniony, potwierdzenia nie powiedzie się, kompilator wyświetla komunikat w string-literal parametr i kończy się niepowodzeniem kompilacji z powodu błędu.

static_assert Deklarację testów potwierdzenia oprogramowania w czasie kompilacji.Z drugiej strony assert (CRT) makro potwierdzenia oprogramowania w czasie wykonywania testów i ponosi koszty wykonywania w przestrzeni lub czasie.static_assert Zgłoszenie jest szczególnie przydatne podczas debugowania szablonów, ponieważ argumenty szablonu można uwzględnić w constant-expression parametru.

Kompilator bada static_assert deklarację błędy składniowe w przypadku napotkania deklaracji.Kompilator wynikiem constant-expression parametr natychmiast, jeśli nie zależy od parametru szablonu.W przeciwnym wypadku kompilator wynikiem constant-expression parametr przy tworzeniu wystąpienia szablonu.W związku z tym, kompilator może wydać diagnostyczne wiadomości raz gdy napotka zgłoszenia i ponownie, gdy szablon zostanie uruchomiony.

Można użyć static_assert słowa kluczowego w przestrzeni nazw, klasy lub zakres bloku.( static_assert Słowo kluczowe jest technicznie w deklaracji, nawet jeśli go nie wprowadzenia nowej nazwy programu, ponieważ używany w zakresie nazw.)

Opis

W poniższym przykładzie static_assert deklaracji ma zakres obszaru nazw.Ponieważ kompilator rozmiar typu void *, wyrażenie jest sprawdzane natychmiast.

Przykład

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

Opis

W poniższym przykładzie static_assert deklarację klasy zakres.static_assert Sprawdza, czy parametr szablonu jest plain old danych typu (POD).Kompilator bada static_assert deklarację, gdy jest zadeklarowana, ale nie ocenia constant-expression parametr aż do basic_string tworzeniu wystąpienia szablonu klasy w main().

Przykład

#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;
}

Opis

W poniższym przykładzie static_assert deklaracji ma zakres bloku.static_assert Sprawdza, czy rozmiar struktury VMPage jest równa pagesize pamięci wirtualnej systemu.

Przykład

#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.");
    // ...
    }
// ...
};

Zobacz też

Informacje

Potwierdzenia i dostarczone przez użytkownika wiadomości (C++)

"# błąd" dyrektywy (C/C++)

assert (CRT)

Zestaw znaków ASCII

Deklaracje

Inne zasoby

Szablony