从C ++ 1z开始,我们有std::string_view
,这是一个连续字符序列的轻量级视图,可以避免不必要的数据复制。现在经常建议使用const std::string&
。
std::string_view
参数
但是,很快就会发现从const std::string&
切换到std::string_view
会破坏使用字符串连接的代码,因为不支持连接std::string
和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::string
和std::string_view
?
答案 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邮件列表上建议将这些运算符重载添加到标准中。