2017-06-19 107 views
14

由于C++ 1z,我们有std::string_view,这是一个连续字符序列的轻量视图,避免了不必要的数据复制。现在通常不推荐使用const std::string&参数,而是使用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不支持在标准?

+10

最有可能的疏忽。也就是说,添加一个'operator +'来使代码工作并不需要太多。 – NathanOliver

+5

刚刚发现这个:https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/1RcShRhrmRc – NathanOliver

+0

我还想念的是std :: basic_string的成员函数,它返回std ::子字符串的basic_string_view(类似于“substr”成员函数),可能名为“substr_view”。 – CAF

回答

2

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

我也省略操作者+(basic_string的,basic_string_ref),因为LLVM返回来自此过载的轻量对象的仅仅进行级联懒惰地。如果我们定义这个重载,稍后我们将很难介绍这种轻量级联。

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

+1

哇。哇!这似乎是最糟糕的可能的原因。该标准应该是为了*语言的好处,*不适用于任何特定的实现。我也对“懒惰地执行连接”感到警惕 - 这是否意味着,如果我们有内存不足,添加到原始字符串的例外将会被延迟?我当然希望不会,我想知道在我*做这种手术时手术是否失败,而不是十分钟后,当我查看结果时。 – paxdiablo

+0

希望有人提交一份包含这些运营商的提案。 – vitaut

相关问题