99

从 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

4

1 回答 1

59

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

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

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

于 2017-12-10T03:35:17.920 回答