C++17以降では、std::string_view
は、不要なデータのコピーを回避する、連続した文字シーケンスへの軽量ビューです。パラメータを使用する代わりにconst std::string&
、 を使用することが推奨されることが多くなりましたstd::string_view
。
const std::string&
しかし、からに切り替えるとstd::string_view
、 と の連結がサポートされていないため、文字列連結を使用するコードが機能しなくなることがすぐにわかりますstd::string
。std::string_view
std::string{"abc"} + std::string_view{"def"}; // ill-formed (fails to compile)
std::string_view{"abc"} + std::string{"def"}; // ill-formed (fails to compile)
標準では連結std::string
とがサポートされていないのはなぜですか?std::string_view
ベストアンサー1
その理由はn3512 string_ref: 文字列への非所有参照、リビジョン 2ジェフリー・ヤスキン著:
また、operator+(basic_string, basic_string_ref) も省略しました。LLVM はこのオーバーロードから軽量オブジェクトを返し、連結を遅延実行するだけだからです。このオーバーロードを定義すると、後で軽量連結を導入するのが難しくなります。
その後、標準提案これらの演算子オーバーロードを標準に追加するためのメーリングリスト。追加するための論文は、P2591 文字列と文字列ビューの連結は、C++26 で承認されました。