Condividi tramite


static_assert

Verifica di un'asserzione software in fase di compilazione.se l'espressione costante specificata è false, il compilatore viene visualizzato il messaggio specificato e l'esito negativo di compilazione a un errore; in caso contrario, la dichiarazione non ha alcun effetto.

static_assert( 
    constant-expression, 
    string-literal 
);

Parametri

Parametro

Descrizione

constant-expression

Un'espressione costante integrale che può essere convertita in un valore booleano.

Se l'espressione viene valutata zero (false), string-literal il parametro viene visualizzato e l'esito negativo di compilazione con un errore.Se l'espressione è diversa da zero (true), static_assert la dichiarazione non ha alcun effetto.

string-literal

Un messaggio visualizzato se constant-expression il parametro è zero.il messaggio è una serie di caratteri in set di caratteri di base il compilatore; ovvero non multibyte o caratteri di tipo " wide ".

Note

constant-expression parametro di static_assert la dichiarazione rappresenta un oggetto asserzione del software.Un'asserzione software specifica una condizione che si prevede sia true in un determinato punto del programma.Se la condizione è true, static_assert la dichiarazione non ha alcun effetto.Se la condizione è false, l'asserzione avrà esito negativo, il compilatore viene visualizzato il messaggio in string-literal parametro e l'esito negativo di compilazione con un errore.

static_assert la dichiarazione verifica un'asserzione software in fase di compilazione.Al contrario, assert (CRT) la macro verifica un'asserzione software in fase di esecuzione e comporta un costo runtime nello spazio o nel tempo.static_assert la dichiarazione è particolarmente utile per il debug dei modelli perché gli argomenti di modello possono essere inclusi in constant-expression parametro.

il compilatore esamina static_assert dichiarazione per gli errori di sintassi durante la dichiarazione viene rilevata.Il compilatore restituisce constant-expression parametro immediatamente se non dipende da un parametro di modello.In caso contrario, viene valutata dal compilatore constant-expression parametro quando viene creata un'istanza del modello.Di conseguenza, il compilatore potrebbe generare una volta un messaggio di diagnostica quando la dichiarazione viene rilevata e nuovamente quando viene creata un'istanza del modello.

È possibile utilizzare static_assert parola chiave allo spazio dei nomi, classe, o l'ambito blocco.( static_assert la parola chiave sia tecnicamente una dichiarazione, anche se non viene introdotto il nuovo nome nel programma, poiché può essere utilizzata in ambito dello spazio dei nomi).

Descrizione

Nell'esempio seguente, static_assert la dichiarazione ha ambito dello spazio dei nomi.Poiché il compilatore conosce la dimensione di tipo void *, l'espressione viene valutata immediatamente.

Esempio

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

Descrizione

Nell'esempio seguente, static_assert la dichiarazione ha ambito della classe.static_assert verifica che un parametro di modello sia a dati non aggiornati) normali Tipo POD ().il compilatore esamina static_assert la dichiarazione quando viene dichiarata, ma non valuta constant-expression parametro fino a basic_string il modello di classe viene creata un'istanza in main().

Esempio

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

Descrizione

Nell'esempio seguente, static_assert la dichiarazione ha ambito blocco.static_assert verifica che la dimensione della struttura di VMPage sia uguale alla memoria virtuale pagesize del sistema.

Esempio

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

Vedere anche

Riferimenti

Asserzione e messaggi Forniti da (C++)

direttiva di #error (C/C++)

assert (CRT)

Set di caratteri ASCII

Dichiarazioni

Altre risorse

Modelli