Sdílet prostřednictvím


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

text # Chyba směrnice (C/C++)

assert (CRT)

Znaková sada ASCII

Prohlášení

Další zdroje

Šablony