文字列長のコンパイル時の計算
コンパイル時に文字列リテラルの長さを計算するために、以下のコード スニペットは再帰関数を利用します。
<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 は、コンパイル時の評価が保証される 2 つの具体的なケースについて概説しています。
したがって、信頼性の高いコンパイル時の評価のために、以下に従うことをお勧めします。これら 2 つのアプローチのいずれかです。
以上がコンパイル時の文字列長の評価をどのように保証できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。