我試圖比較一個constexpr-if語句中的函數參數。在constexpr-if條件下比較constexpr函數參數會導致錯誤
下面是一個簡單的例子:
constexpr bool test_int(const int i) {
if constexpr(i == 5) { return true; }
else { return false; }
}
然而,當我用下面的標誌編譯這個海灣合作委員會7: g++-7 -std=c++1z test.cpp -o test
我收到以下錯誤信息:
test.cpp: In function 'constexpr bool test_int(int)':
test.cpp:3:21: error: 'i' is not a constant expression
if constexpr(i == 5) { return true; }
然而,如果我將test_int
替換爲不同的功能:
constexpr bool test_int_no_if(const int i) { return (i == 5); }
然後將下面的代碼編譯沒有任何錯誤:
int main() {
constexpr int i = 5;
static_assert(test_int_no_if(i));
return 0;
}
我不明白爲什麼constexpr,如果版本編譯失敗,特別是因爲static_assert工作得很好。
任何意見,將不勝感激。
謝謝!
爲什麼constexpr(i == 5)而不只是我== 5? – deW1
任何爲什麼這麼複雜?爲什麼不返回我== 5? – deW1