Реализация этих методов кажется мне простой, и они сделают использование std::string
и std::string_view
более взаимозаменяемым. В конце концов, у std::string_view
есть конструкторы, которые оставляют объект в том же состоянии, что и эти методы. Можно было бы обойти отсутствующие методы следующим образом:
std::string s {"abcd"};
std::string_view v {s.c_str()};
std::cout << "ctor: " << v << std::endl; // "abcd"
v = {s.c_str() + 1, 2};
std::cout << "assign: " << v << std::endl; // "bc"
v = {nullptr}; // or even v = {};
std::cout << "clear: " << v << std::endl; // ""
Итак, каковы причины того, что эти два очевидных метода не включены в стандарт?
ОБНОВЛЕНИЕ: кажется, что один общий вопрос в ваших комментариях звучит так: «В чем смысл?», поэтому я дам вам некоторый контекст. Я разбираю большую строку, в результате чего получается структура подстрок. Эта результирующая структура является естественным кандидатом для строковых представлений, поэтому мне не нужно копировать все эти строки, которые даже перекрываются. Частью результата являются сопоставления со строковыми представлениями, поэтому мне может понадобиться сконструировать их пустыми, когда я получу ключ, и заполнить их позже, когда я получу значение. При синтаксическом анализе мне нужно отслеживать промежуточные строки, что включает их обновление и сброс. Теперь их можно было заменить строковыми представлениями, и именно так я и поступил с этими отсутствующими функциями. Конечно, я мог бы продолжать использовать строки или заменить их на старые добрые пары ptr-ptr или ptr-size, но именно для этого и предназначен std::string_view
, верно?
std::string
(вероятно, именно по этой причине вы ищете). Точно так же изменение указателя на nullptr отличается от удаления объекта, на который он указывает. - person Max Langhof   schedule 24.01.2019std::vector<int>::clear()
будет семантически отличаться отstd::vector<int*>::clear()
, не так ли? - person Simpleton   schedule 24.01.2019int
, иint*
легко освобождаются, семантической разницы нет. Кстати, я согласен с вами, что есть интерпретацииassign
иclear
, в которых нет ярко выраженной семантической разницы. Но вы должны согласиться с тем, что может возникнуть путаница, еслиclear
также очищает саму просматриваемую строку - в конце концов,std::string
делает это. - person Max Langhof   schedule 24.01.2019