Closed apolukhin closed 3 years ago
Удалённый пользователь, 1 апреля 2019, 23:13
С появлением std::to_chars, std::from_chars, все std::stoi, stol, stoll -- можно считать "старый" (old-school). Есть ли смысл поддерживать их дальше для новых типах.
yndx-antoshkka, 31 июля 2019, 13:39 stringstream были дотюнены в https://wg21.link/p0408. Теперь есть методы для получения string_view на внутреннее содержимое и методы для передачи/извлечения буфера.
string_view умеют выводиться в поток, так что по стандарту строка создваваться не должна, да и на практике это не происходит.
А вот stoi стоит заняться.
ujos, 17 марта 2020, 16:56
можно считать "старый" (old-school).
Во первых, to_char/from_chars не поддерживают локаль. std::stoi вроде поддерживает
Во вторых, operator<<(ostream&, T)
часто используется как способ конвертации Т в строку, и operator>>(istream&, T&)
для конвертации строки в Т.
stringstream были дотюнены в https://wg21.link/p0408.
Что-то не нахожу там перегрузки конструктора std::istringstream для std::string_view...
yndx-antoshkka, 22 июля 2020, 11:58 ujos,
stringstream были дотюнены в https://wg21.link/p0408.
Что-то не нахожу там перегрузки конструктора std::istringstream для std::string_view...
Там добавилась перегрузка от string&&, что даёт похожий эффект т.к. строка обязана быть скопирована/перемещена во внутрений буфер.
yndx-antoshkka, 22 июля 2020, 11:52
Идея string_view перегрузок для stoi была представлена в бумаге https://wg21.link/P0506 и отклонена комитетом:
если заменять const std::string& на string_view, то ломается пользовательский код с неявными преобразованиями
если добавлять перегрузки, то необходимо иметь по 3 перегрузки для каждого метода или много шаблонного безобразия
если добовлять новые методы, с новыми именами... то производительность это не особо улучшает, т.к. большая часть времени тратится на локали, а конструирование малой строки как правило происходид без динамической аллокации
Так что P0506 отклонили в 2017 году. Но возможно с C++20 и концептами можно придумать хорошее решение, без недостатоков 2017 года.
Подобная идея уже предлагалась: #263
Перенос предложения: голоса +??, -?? Автор идеи: ??
Предложение улучшает философию C++ "Не платить за то, что не используется" для stoi и istringstream т.к. в стандартной библиотеке в приведенных ситуациях приходится платить созданием временной строки, которая в дальнейшем не используется.