如何有效地为std :: string的子字符串获取`string_view`
使用http://en.cppreference.com/w/cpp/string/basic_string_view作为参考,我认为没有办法更优雅地做到这一点: std::string s = "hello world!"; std::string_view v = s; v = v.substr(6, 5); // "world" 更糟糕的是,幼稚的方法是一个陷阱,并留下v了对临时对象的悬挂: std::string s = "hello world!"; std::string_view v(s.substr(6, 5)); // OOPS! 我似乎记得类似的东西,可能在标准库中添加了一个将子字符串作为视图返回的内容: auto v(s.substr_view(6, 5)); 我可以想到以下解决方法: std::string_view(s).substr(6, 5); std::string_view(s.data()+6, 5); // or even "worse": std::string_view(s).remove_prefix(6).remove_suffix(1); 坦白说,我认为这些都不是很好。现在,我能想到的最好的事情就是使用别名来使事情变得不再那么冗长。 using sv = std::string_view; sv(s).substr(6, 5);