Consteval 函數可以啟用依賴函數參數的範本參數嗎?
在C 17 中,像下面的程式碼片段這樣的constexpr 函數是無效的:
<code class="cpp">constexpr int foo(int i) { return std::integral_constant<int, i>::value; }</code>
儘管foo 在編譯時求值,但編譯器要求它在運行時可執行,這阻礙了模板實例化。
C 20 引入了 consteval 函數,強制編譯時求值。人們可能想知道這是否允許使用以下程式碼:
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
答案是否。
論文的潛在更改不能改變非模板的單一類型函數定義。此外,如果這段程式碼有效,它將開啟宣告 std::integral_constant
論文也透過一個例子說明了參數不會被視為核心常數表達式:
<code class="cpp">consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, but that's okay. }</code>
本質上,函數參數總是會因為潛在的類型不一致而缺乏常數表達式狀態。
以上是Consteval 函數可以允許模板參數依賴函數參數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!