С++ 11 вводит удобные функции stoi, stol, stoll, stoul, stoull, stof, stod и stold, которые преобразуют строку в целое число, long, long long, unsigned long, unsigned long long, float, double или long double, соответственно.
Почему нет любви к короткому и неподписанному короткому?
Помимо того факта, что упущение меня раздражает из принципа, я обнаружил, что мне приходится неудобно работать в таких ситуациях:
#include <string>
struct S
{
S(short);
};
int main()
{
S s{std::stoi("4")};
}
Ошибка:
test.cpp: In function 'int main()':
test.cpp:10:23: error: narrowing conversion from 'int' to 'short int' inside { } [-fpermissive]
Я хотел бы вместо этого написать S s{std::stos("4")};, если только был stos...
Вместо этого мне нужно написать S s{static_cast<short>(std::stoi("4"))};... oh wait, и это тоже не получится, что беззвучно усекает целые числа дольше, чем короткие, в отличие от гипотетической stos функции, которая генерирует исключение, если целое число не вписывается в короткий. Поэтому в основном я вернусь к моим пред-С++ 11 альтернативам stringstreams, boost::lexical_cast и т.д.
РЕДАКТИРОВАТЬ. Поскольку людям, кажется, нелегко найти мой реальный вопрос, почему нет функций stos и stous, чтобы идти вместе с другими