static_assert

Überprüft eine Software-Assertion zur Kompilierzeit.Wenn der angegebene konstante Ausdruck falseist, zeigt der Compiler die angegebene Meldung und die Kompilierung schlägt mit einem Fehler aus. Andernfalls ist die Deklaration keine Auswirkungen.

static_assert( 
    constant-expression, 
    string-literal 
);

Parameter

Parameter

Beschreibung

constant-expression

Ein ganzzahliger konstanter Ausdruck, der in einen booleschen Wert konvertiert werden kann.

Wenn der ausgewertete Ausdruck (false) (null) ist, wird der string-literal-Parameter angezeigt, und die Kompilierung schlägt mit einem Fehler aus.Wenn der Ausdruck true () nicht 0 ist, hat die static_assert Deklaration keine Auswirkungen.

string-literal

Eine Meldung, die angezeigt wird, wenn der constant-expression-Parameter Null ist.Die Meldung ist eine Zeichenfolge mit Zeichen in Basiszeichensatz des Compilers verfügbar. d. h. nicht Breitzeichen oder Mehrbyt.

Hinweise

Der constant-expression-Parameter einer static_assert Deklaration erstellt eine Software-Assertiondar.Eine Software-Assertion gibt eine Bedingung an, die Sie erwarten, dass an einem bestimmten Punkt im Programm zutreffen.Wenn die Bedingung erfüllt ist, hat die static_assert Deklaration keine Auswirkungen.Wenn die Bedingung false ist, schlägt die Assertion fehl, zeigt der Compiler die Nachricht in string-literal-Parameter an, und die Kompilierung schlägt mit einem Fehler aus.

Die static_assert Deklaration testet eine Software-Assertion zur Kompilierzeit.Im Gegensatz dazu werden die assert (CRT) Makro eine Software-Assertion zur Laufzeit und verursacht Laufzeit beeinträchtigt im Raum oder Uhrzeitwerts.Die static_assert Deklaration ist zum Debuggen von Vorlagen besonders nützlich, da Vorlagenargumente in constant-expression-Parameter aufgenommen werden kann.

Der Compiler überprüft die static_assert Deklaration für Syntaxfehler, wenn die Deklaration gefunden wird.Der Compiler wertet den Parameter constant-expression sofort aus, wenn er nicht von einem Vorlagenparameter abhängt.Andernfalls wird der Compiler den constant-expression-Parameter aus, wenn die Vorlage instanziiert wird.Daher gibt der Compiler möglicherweise eine Diagnosemeldung einmal ausgeführt, wenn die Deklaration gefunden wird und erneut, wenn die Vorlage instanziiert wird.

Sie können das static_assert-Schlüsselwort am Namespace, die Klasse oder der Blockbereich verwenden.(Das static_assert-Schlüsselwort ist technisch eine Deklaration, obwohl der neuen Namen nicht in das Programm vorstellt, da es im Namespacebereich verwendet werden kann.)

Beschreibung

Im folgenden Beispiel verfügt die static_assert Deklaration Namespacebereich.Da der Compiler die Größe des Typs void *kennt, wird der Ausdruck sofort ausgewertet.

Beispiel

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

Beschreibung

Im folgenden Beispiel verfügt die static_assert Deklaration Klassengültigkeitsbereich.static_assert überprüft, ob ein Vorlagenparameter ein einfacher alter Datentyp (HÜLSE) ist.Der Compiler überprüft die static_assert Deklaration, wenn es deklariert wird, wertet jedoch nicht den constant-expression-Parameter durch, bis die basic_string-Klassenvorlage in main()Instanziierung.

Beispiel

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

Beschreibung

Im folgenden Beispiel verfügt die static_assert Deklaration der Blockbereich.static_assert überprüft, ob die Größe der VMPage-Struktur gleich den virtuellen Arbeitsspeicher pagesize vom System ist.

Beispiel

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

Siehe auch

Referenz

Assertion und vom Benutzer bereitgestellte Meldungen (C++)

#error Direktive (C/C++)

assert (CRT)

ASCII-Zeichensatz

Deklarationen

Weitere Ressourcen

Vorlagen