static_assert
Testy softwaru výrazu v době kompilace.Pokud je zadané konstantní výraz false, kompilátor zobrazí zadanou zprávu a kompilace se nezdaří s chybou; prohlášení jinak nemá žádný vliv.
static_assert(
constant-expression,
string-literal
);
Parametry
Parametr |
Description |
---|---|
constant-expression |
Nedílnou konstantní výraz, který lze převést na logickou hodnotu. Pokud vyhodnocený výraz je nula (false), string-literal se zobrazí parametr a kompilace se nezdaří s chybou.Pokud je výraz nenulovou hodnotu (true) static_assert prohlášení nemá žádný vliv. |
string-literal |
Zpráva, která se zobrazí, pokud constant-expression parametr je nula.Zpráva je řetězec znaků základní znakové sady kompilátoru; To znamená, že není znaků na vícebajtové nebo široké. |
Poznámky
constant-expression Parametr static_assert představuje prohlášení software výrazu.Uplatnění software určuje podmínky, že očekáváte pravdivý na určitém místě v programu.Pokud je podmínka splněna, static_assert prohlášení nemá žádný vliv.Pokud je podmínka NEPRAVDA, nezdaří uplatnění, kompilátor zobrazí zprávu v string-literal parametr a kompilace se nezdaří s chybou.
static_assert Prohlášení zkoušky softwaru výrazu v době kompilace.Naopak assert (CRT) makro software výrazu v době spuštění testů a poněkud běhu náklady v prostoru nebo čase.static_assert Prohlášení je zvláště užitečné pro ladění šablony, protože mohou být součástí šablony argumenty constant-expression parametr.
Kompilátor zkoumá static_assert prohlášení pro syntaktické chyby, pokud je zjištěna prohlášení.Vyhodnocuje kompilátor constant-expression parametr okamžitě, pokud není závislá na parametr šablony.V opačném případě se vyhodnocuje kompilátor constant-expression parametr při vytváření instance šablony.V důsledku toho kompilátor může vydat diagnostické zprávy jednou při výskytu prohlášení a znovu při vytvoření šablony.
Můžete použít static_assert klíčové slovo na obor názvů, třídu nebo rozsah blok.( static_assert Klíčové slovo je technicky prohlášení, i když jej nezavádí nové jméno do programu, protože používá v oboru názvů.)
Description
V následujícím příkladu static_assert prohlášení má obor názvů.Protože kompilátor zná velikost typu void *, je výraz vyhodnocen okamžitě.
Příklad
static_assert(sizeof(void *) == 4, "64-bit code generation is not supported.");
Description
V následujícím příkladu static_assert prohlášení má rozsah třídy.static_assert Ověří, zda je parametr šablony obyčejný stará data typu (POD).Kompilátor zkoumá static_assert prohlášení je deklarována, ale nelze vyhodnotit constant-expression parametr až basic_string je instancí třídy šablony v main().
Příklad
#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;
}
Description
V následujícím příkladu static_assert prohlášení má rozsah blok.static_assert Ověří, zda je velikost struktury VMPage rovna pagesize virtuální paměti systému.
Příklad
#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.");
// ...
}
// ...
};
Viz také
Referenční dokumentace
Uplatnění a uživatelský zprávy (C++)