为什么不支持连接 std: : string 和 std: : string_view?

从 C + + 17开始,我们使用了 std::string_view,这是一个轻量级视图,可以将字符串连成一个序列,从而避免不必要的数据复制。现在通常建议使用 std::string_view,而不是使用 const std::string&参数。

However, one quickly finds out that switching from const std::string& to std::string_view breaks code that uses string concatenation as there is no support for concatenating std::string and 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::stringstd::string_view

20766 次浏览

原因由 Jeffrey Yasskin 在 N3512 string _ ref: 对字符串的非所有引用,修订版2中给出:

我还省略了操作符 + (basic _ string,basic _ string _ ref) ,因为 LLVM 从这个重载中返回一个轻量级对象,并且只延迟执行连接。如果我们定义了这个重载,我们将很难在以后引入轻量级连接。

It has been later suggested on the 性病求婚 mailing list to add these operator overloads to the standard.

我已经提交了 P2591: 字符串和字符串视图的串联,链接到这个 SO 问题。此时的论文是针对 C + + 26最低。