最佳答案
使用 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);