我一直std::string_view在一些旧代码中添加 s 来表示配置参数等字符串,因为它提供了只读视图,由于不需要复制,速度更快。
string_view但是,由于operator+未定义,因此无法将两个连接在一起。我看到这个问题有几个答案表明它是一个疏忽,并且有一个建议添加它。但是,这是添加 astring和 a string_view,大概如果实现的话,生成的串联将是std::string
添加两个string_view也属于同一类别吗?如果不是,为什么不string_view支持添加两个?
样本
std::string_view s1{"concate"};
std::string_view s2{"nate"};
std::string_view s3{s1 + s2};
Run Code Online (Sandbox Code Playgroud)
这是错误
error: no match for 'operator+' (operand types are 'std::string_view' {aka 'std::basic_string_view<char>'} and 'std::string_view' {aka 'std::basic_string_view<char>'})
Run Code Online (Sandbox Code Playgroud) 最近,我遇到了打印类似vector这样的代码
std::copy(vec.begin(), vec.end(), std::ostream_iterator<T>(std::cout, " ");
Run Code Online (Sandbox Code Playgroud)
将其与我习惯的(for_each或基于范围的 for 循环)进行比较
auto print = [](const auto & element){std::cout << element << " ";};
std::for_each(vec.begin(), vec.end(), print);
Run Code Online (Sandbox Code Playgroud)
copy方法是否会创建额外的副本?在for_each我可以有一个常量引用。copy指出它将元素从一个范围复制到另一个范围。std::ostream_iterator<T>范围如何?如果是的话那么它从哪里开始和结束?copy方法模板化,而for_each我可以auto这样看起来更方便。这让我感觉这个for_each方法更好?