cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
88 stars 0 forks source link

Добавить string_view перегрузки для stoi и istringstream #427

Closed apolukhin closed 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +??, -?? Автор идеи: ??

Предложение улучшает философию C++ "Не платить за то, что не используется" для stoi и istringstream т.к. в стандартной библиотеке в приведенных ситуациях приходится платить созданием временной строки, которая в дальнейшем не используется.

apolukhin commented 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 и отклонена комитетом:

Так что P0506 отклонили в 2017 году. Но возможно с C++20 и концептами можно придумать хорошее решение, без недостатоков 2017 года.

apolukhin commented 3 years ago

Подобная идея уже предлагалась: #263