提供的程式碼示範了嘗試在常數表達式式中利用constexpr 函數make_const 的回傳值,但遇到錯誤。
static constexpr int make_const(const int i) { return i; } void t1(const int i) { constexpr int ii = make_const(i); // Error occurs here (i is not a constant expression) std::cout << ii; } int main() { t1(12); // Call the function }
與普遍看法相反,constexpr 函數不會神奇地在編譯時評估其參數。相反,它允許 constexprness 從其輸入參數傳播到其輸出。然而,在給定的程式碼中,函數參數 i 不是 constexpr,因此 constexpr 函數 make_const 無法將其轉換為 constexpr。
出現錯誤是因為後續賦值 constexpr int ii = make_const(i) 嘗試宣告一個 constexpr 變數 (ii),並使用非 constexpr 表達式 (make_const(i)) 的結果進行初始化。這是不允許的,因為 constexpr 變數必須始終使用 constexpr 表達式進行初始化。
constexpr 函數有兩個關鍵特徵:
要解決該錯誤,可以確保函數參數本身是constexpr。這可以透過將函數宣告修改為:
constexpr int make_const(constexpr int i) { return i; }
此變更保證函數可以有效地將其 constexpr 輸入轉換為 constexpr 輸出,從而能夠在常數表達式中實現函數的預期用途。
在提供的替代程式碼範例中,函數 make_const 可以作為 t1 中的 constexpr 表達式進行調用,因為它的參數現在是 constexpr。但是,嘗試將非 constexpr 表達式(例如運行時變數)的結果傳遞到函數中仍然會導致錯誤,因為該函數需要 constexpr 參數才能執行 constexpr。
以上是為什麼我不能在常數表達式中使用 `constexpr` 函數的函數參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!