web-dev-qa-db-ja.com

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

C++ 1z以降、 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::stringstd::string_viewの連結がサポートされていないのはなぜですか?

40
s3rvac

この理由は n3512 string_ref:文字列への非所有参照、リビジョン2 Jeffrey Yasskinによって与えられています:

Operator +(basic_string、basic_string_ref)も省略しました。LLVMはこのオーバーロードから軽量オブジェクトを返し、連結のみを遅延的に実行するためです。このオーバーロードを定義すると、後でその軽量な連結を導入するのに苦労します。

後で std-proposals メーリングリストでこれらの演算子のオーバーロードを標準に追加することが提案されています。

16
vitaut