1. ホーム
  2. c++

[解決済み] std::string と std::string_view の連結はなぜサポートされていないのですか?

2023-01-21 02:22:08

質問

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::stringstd::string_view を標準にするのですか?

どのように解決するのですか?

にその理由が書かれています。 n3512 string_ref: a non-owning reference to a string, revision 2. by Jeffrey Yasskin を参照してください。

また、operator+(basic_string, basic_string_ref) を省略したのは、LLVMがこのオーバーロードから軽量なオブジェクトを返し、連結を遅延的にしか行わないからです。このオーバーロードを定義してしまうと、後でその軽量な連結を導入するのが大変になります。

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