定数式でstd::stringを使用することは可能ですか? 質問する

定数式でstd::stringを使用することは可能ですか? 質問する

C++11、Ubuntu 14.04、GCC デフォルト ツールチェーンを使用します

このコードは失敗します:

constexpr std::string constString = "constString";

エラー: constexpr 変数 'c​​onstString' の型 'const string {別名 const std::basic_string}' はリテラルではありません... 'std::basic_string' には非自明なデストラクタがあるためです

std::stringで使用することは可能ですかconstexpr? (どうやら不可能なようです...) もし可能であれば、どのようにすればよいですか? で文字列を使用する別の方法はありますかconstexpr?

ベストアンサー1

現在C++20はい、ただし、std::string定数評価の終了時に が破棄された場合のみです。したがって、あなたの例はまだコンパイルされませんが、次のようなものはコンパイルされます。

constexpr std::size_t n = std::string("hello, world").size();

しかし、C++17、使用することができますstring_view:

constexpr std::string_view sv = "hello, world";

Astring_viewstring任意のオブジェクト シーケンスへの不変の非所有参照として機能する、 のようなオブジェクトchar

おすすめ記事