定数式での std::string の利用
Constexpr 変数は最新の C の重要なコンポーネントであり、複雑な式のコンパイル時の解決を提供します。ただし、要件が厳しいため、constexpr コンテキストで std::string を使用することには、歴史的に問題がありました。
C 11 では、提供されたコード スニペットに示されているように、定数 std::string を定義しようとします。コンパイルエラーで。説明は、std::string の非自明なデストラクタにあり、これによりリテラル型とみなされなくなります。
C 20 および C 17 の解決策
幸いなことに、C 20 は、このジレンマに解決策をもたらしました。定数の評価が完了する前に std::string が破棄されることが保証されている場合、constexpr 内での使用が有効になります。元のクエリの例は無効なままですが、非定数文字列リテラルから作成された std::string のサイズを決定するなどのコード (回答に示されているように) は正常にコンパイルされます。
C に加えて20 の機能強化により、C 17 で std::string_view が誕生しました。この文字列のようなオブジェクトは、既存の文字シーケンスを所有したり変更したりすることなく、その文字シーケンスへの不変の参照を提供します。回答で示されているように、constexpr std::string_view を定義すると、定数式での文字列の使用の問題が解決されます。
これらの解決策を通じて、C 20 と C 17 の両方で、constexpr の表現力と能力が大幅に向上します。最新の C プログラミング。
以上が定数式で std::string を使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。