C++11、Ubuntu 14.04、GCC デフォルト ツールチェーンを使用します。
このコードは失敗します:
constexpr std::string constString = "constString";
エラー: constexpr 変数 'constString' の型 '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_view
はstring
任意のオブジェクト シーケンスへの不変の非所有参照として機能する、 のようなオブジェクトchar
。