簡體   English   中英

constexpr構造函數與編譯時驗證

[英]constexpr constructor with compile time validation

我想用constexpr-ness選項建立一個類。 並且,當然,我想利用編譯時錯誤檢查。

當給定參數不是常量表達式時,每個包含構造函數的constexpr函數也必須在運行時工作。 這應該是每次在函數參數的constexpr函數中使用static_assert時無法編譯的原因。

這樣說,我已經讀過,可以使用拋出mechnanism的異常,因為當函數被調用為常量表達式時,可以在編譯時評估這些異常。 如果可行,對於功能可以解決問題。

但是問題仍然沒有解決構造函數,因為constexpr構造函數似乎必須沒有正文...所以看起來我不能使用那里的異常拋出!

任何想法?

以下可能有所幫助

class A
{
public:
    constexpr A(int i) : i(i != 42 ? throw 42 : i) {}
private:
    int i;
};

int main(int argc, char *argv[])
{
    constexpr A a1(42);
    //constexpr A a2(41); // Compile error as expected.
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM