C++ 1z以降、 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
の連結がサポートされていないのはなぜですか?
この理由は n3512 string_ref:文字列への非所有参照、リビジョン2 Jeffrey Yasskinによって与えられています:
Operator +(basic_string、basic_string_ref)も省略しました。LLVMはこのオーバーロードから軽量オブジェクトを返し、連結のみを遅延的に実行するためです。このオーバーロードを定義すると、後でその軽量な連結を導入するのに苦労します。
後で std-proposals メーリングリストでこれらの演算子のオーバーロードを標準に追加することが提案されています。