首頁  >  文章  >  後端開發  >  Consteval 函數可以允許模板參數依賴函數參數嗎?

Consteval 函數可以允許模板參數依賴函數參數嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-24 01:35:01390瀏覽

Can Consteval Functions Allow Template Parameters Reliant on Function Arguments?

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 類型變數的可能性,這在單一定義規則 (ODR) 方面似乎具有高度限制性。

論文也透過一個例子說明了參數不會被視為核心常數表達式:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn