Используя 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);