从C++1Z开始,我们就有了std::string_view
,这是一个进入连续字符序列的轻量级视图,可以避免不必要的数据复制。 现在通常建议使用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
串联起来?
Jeffrey Yasskin的n3512 string_ref:a non-owning reference to a string,revision 2中给出了这样做的原因:
我还省略了运算符+(basic_string,basic_string_ref),因为LLVM从这个重载返回一个轻量级对象,并且只缓慢地执行连接。 如果我们定义了这个重载,我们将很难在后面介绍这个轻量级连接。
后来在STD提案邮件列表中建议将这些操作符重载添加到标准中。