constexpr 変数と文字列リテラル
C では、constexpr 変数はリテラル型でなければなりません。これは、自明でないデストラクターを持つオブジェクトを保持できないことを意味します。 。 C 11 で constexpr std::string 変数を定義しようとすると、std::string の非自明なデストラクターが原因でエラーが発生します。
constexpr 文字列リテラルの代替
C 20 以降、 std::string を使用できるようになりました。特定の条件下での constexpr 式。具体的には、std::string は定数評価の終了までに破棄される必要があります。
例:
constexpr std::size_t n = std::string("hello, world").size();
この例では、std::string は次のようになります。サイズを評価する式の一部として破棄されるため、コードは有効です。
String_View代替
constexpr 式で文字列のようなオブジェクトを使用する別のオプションは、C 17 で導入された std::string_view を利用することです。
例:
constexpr std::string_view sv = "hello, world";
std::string_view は不変の文字列のようなオブジェクトを表します。基礎となる文字シーケンスへの非所有アクセス。重要なデストラクターがないため、constexpr 式での使用に適しています。
以上がconstexpr 変数は C で文字列を保持できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。