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

时间:2017-06-19 17:26:55

标签: c++ string c++17 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

1 个答案:

答案 0 :(得分:14)

Jeffrey Yasskin在n3512 string_ref: a non-owning reference to a string, revision 2中给出了这个原因:

  

我还省略了operator +(basic_string,basic_string_ref),因为LLVM从这个重载返回一个轻量级对象,只是懒惰地执行连接。如果我们定义这个重载,我们将很难在以后引入轻量级连接。

后来在std-proposals邮件列表上建议将这些运算符重载添加到标准中。