編譯時計算字串長度
為了在編譯時計算字串文字的長度,下面的程式碼片段使用了遞歸函數:
<code class="cpp">#include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); }</code>
此函數成功計算了預期的長度,從clang 產生的彙編程式碼可以證明這一點,它顯示了在編譯時計算的結果。
標準保證編譯時求值
但是,值得注意的是,標準並未明確保證編譯時常數表達式的求值。雖然 C 標準草案第 5.19 節確實包含一個非規範引用,指出可以在翻譯過程中評估常數表達式,但這並不能提供明確的保證。
確保編譯時評估
為了確保在編譯時計算函數,Bjarne Stroustrup 建議將其結果分配給 constexpr 變數。這可以在以下範例中看到:
<code class="cpp">constexpr int len1 = length("abcd");</code>
此外,Bjarne Stroustrup 概述了保證編譯時評估的兩種特定情況:
因此,為了可靠的編譯時評估,建議遵循這兩種方法中的任何一種。
以上是我們如何保證字串長度的編譯時評估?的詳細內容。更多資訊請關注PHP中文網其他相關文章!