提问者:小点点

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


从C++1Z开始,我们就有了std::string_view,这是一个进入连续字符序列的轻量级视图,可以避免不必要的数据复制。 现在通常建议使用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个答案

匿名用户

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

我还省略了运算符+(basic_string,basic_string_ref),因为LLVM从这个重载返回一个轻量级对象,并且只缓慢地执行连接。 如果我们定义了这个重载,我们将很难在后面介绍这个轻量级连接。

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