共用方式為


static_assert

測試在編譯時期軟體判斷提示。 如果指定的常數運算式是false,編譯器就會顯示指定的訊息和編譯失敗並發生錯誤。 否則,宣告會有任何作用。

static_assert( 
    constant-expression, 
    string-literal 
);

參數

參數

描述

constant-expression

整數常數運算式轉換為布林值。

如果評估的運算式為零 (false), string-literal參數會顯示和編譯失敗並發生錯誤。 如果運算式為非零值 (true) static_assert宣告會有任何作用。

string-literal

如果就會出現一個訊息constant-expression參數為零。 郵件是一串字元,在基底的字元集的編譯器。 也就是不多位元組或寬字元

備註

constant-expression參數的static_assert宣告表示軟體判斷提示就。 軟體的判斷提示就會指定您希望能在程式中特定時間點,則為 true 的條件。 如果條件為真, static_assert宣告會有任何作用。 如果此條件為 false,表示判斷提示失敗,編譯器就會顯示在訊息string-literal參數,而編譯失敗,因發生錯誤。

static_assert宣告測試在編譯時期軟體判斷提示。 相反地, assert (CRT)測試在執行階段軟體判斷提示巨集,以及而導致空間或時間中的執行的階段成本。 static_assert宣告特別適用於偵錯的範本,因為樣板引數可以包含在constant-expression參數。

編譯器會檢查static_assert語法錯誤發生在宣告時的宣告。 編譯器會評估constant-expression參數,如果它不會根據的樣板參數時立即。 否則,編譯器會評估constant-expression當範本具現化的參數。 因此,編譯器可能會發出診斷訊息一次當發生在宣告時,並一次當範本具現化。

您可以使用static_assert在命名空間、 類別或區塊範圍的關鍵字。 ( static_assert關鍵字是嚴格來說,這一種宣告,即使不就會產生新的名稱到您的程式,因為它可以用在命名空間範圍。)

描述

在下列範例中, static_assert宣告具有命名空間範圍。 因為編譯器知道型別的大小void *,會立即評估運算式。

範例

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

描述

在下列範例中, static_assert宣告具有類別範圍。 static_assert驗證的樣板參數是單純的舊資料 (POD) 型別。 編譯器會檢查static_assert宣告,當它被宣告,但不會評估constant-expression參數,直到basic_string類別樣板執行個體化中main()。

範例

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

描述

在下列範例中, static_assert宣告擁有區塊範圍。 static_assert VMPage 結構大小相當於系統的虛擬記憶體 pagesize 會驗證。

範例

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

請參閱

參考

判斷提示和使用者提供的訊息 (C++)

# error 指示詞 (C/C++)

assert (CRT)

ASCII 字元集

宣告

其他資源

範本