std::string と std::string_view の連結がサポートされていないのはなぜですか? 質問する

std::string と std::string_view の連結がサポートされていないのはなぜですか? 質問する

C++17以降では、std::string_viewは、不要なデータのコピーを回避する、連続した文字シーケンスへの軽量ビューです。パラメータを使用する代わりにconst std::string&、 を使用することが推奨されることが多くなりましたstd::string_view

const std::string&しかし、からに切り替えるとstd::string_view、 と の連結がサポートされていないため、文字列連結を使用するコードが機能しなくなることがすぐにわかりますstd::stringstd::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 で承認されました。

おすすめ記事