コンパイル時の文字列長の評価をどのように保証できるでしょうか?

Susan Sarandon
リリース: 2024-10-31 10:13:29
オリジナル
223 人が閲覧しました

How Can We Guarantee Compile-Time Evaluation of String Length?

文字列長のコンパイル時の計算

コンパイル時に文字列リテラルの長さを計算するために、以下のコード スニペットは再帰関数を利用します。

<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 つの具体的なケースについて概説しています。

  1. 関数が使用される場合バインドされた配列などの定数式が必要です。
  2. 関数を使用して constexpr を初期化する場合。

したがって、信頼性の高いコンパイル時の評価のために、以下に従うことをお勧めします。これら 2 つのアプローチのいずれかです。

以上がコンパイル時の文字列長の評価をどのように保証できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!