天天看點

利用constexpr聲明數組的大小

摘自:這裡

你想要一個計算數組size的函數,size是10的倍數。如果不用constexpr,你需要建立一個宏或者使用模闆,因為你不能用函數的傳回值去聲明數組的大小。但是用constexpr,你就可以調用一個constexpr函數去聲明一個數組。

constexpr int getDefaultArraySize (int multiplier)
{
    return 10 * multiplier;
}

int my_array[ getDefaultArraySize( 3 ) ];
int a = 4;  //非常量表達式
getDefaultArraySize(a);  //ok
           

constexpr修飾的函數,簡單的來說,如果其傳入的參數可以在編譯時期計算出來,那麼這個函數就會産生編譯時期的值。但是,傳入的參數如果不能在編譯時期計算出來,那麼constexpr修飾的函數就和普通函數一樣了。不過,我們不必是以而寫兩個版本,是以如果函數體适用于constexpr函數的條件,可以盡量加上constexpr。

繼續閱讀