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++)