std::stof, std::stod, std::stold
Определено в заголовочном файле <string> | ||
|---|---|---|
float stof ( const std::string& str, std::size_t* pos = nullptr ); | (1) | (начиная с C++11) |
float stof ( const std::wstring& str, std::size_t* pos = nullptr ); | (2) | (начиная с C++11) |
double stod ( const std::string& str, std::size_t* pos = nullptr ); | (3) | (начиная с C++11) |
double stod ( const std::wstring& str, std::size_t* pos = nullptr ); | (4) | (начиная с C++11) |
long double stold( const std::string& str, std::size_t* pos = nullptr ); | (5) | (начиная с C++11) |
long double stold( const std::wstring& str, std::size_t* pos = nullptr ); | (6) | (начиная с C++11) |
Интерпретирует значение с плавающей точкой в строке str.
Пусть ptr — внутренний (для функций преобразования) указатель типа char* (1,3,5) или wchar_t* (2,4,6), соответственно.
std::strtof(str.c_str(), &ptr).std::wcstof(str.c_str(), &ptr).std::strtod(str.c_str(), &ptr).std::wcstod(str.c_str(), &ptr).std::strtold(str.c_str(), &ptr).std::wcstold(str.c_str(), &ptr).Функция отбрасывает все символы пробельного пространства (как определено в std::isspace), пока не будет найден первый непробельный символ. Затем она считывает максимально возможное количество символов, образующих допустимое представление числа с плавающей точкой, и преобразует их в значение с плавающей точкой. Допустимое значение с плавающей точкой может иметь один из следующих видов:
- десятичное выражение с плавающей точкой. Оно состоит из следующих частей:
- (необязательно) знак плюс или минус
- непустая последовательность десятичных цифр, которая может содержать символ десятичной точки (определяемый текущей локалью C) (задаёт значащую часть)
-
(необязательно)
eилиE, за которым следует необязательный знак минус или плюс и непустая последовательность десятичных цифр (задаёт показатель степени по основанию 10) - шестнадцатеричное выражение с плавающей точкой. Оно состоит из следующих частей:
- (необязательно) знак плюс или минус
-
0xили0X - непустая последовательность шестнадцатеричных цифр, которая может содержать символ десятичной точки (определяемый текущей локалью C) (задаёт значащую часть)
-
(необязательно)
pилиP, за которым следует необязательный знак минус или плюс и непустая последовательность десятичных цифр (задаёт показатель степени по основанию 2) - выражение бесконечности. Оно состоит из следующих частей:
- (необязательно) знак плюс или минус
-
INFилиINFINITYбез учёта регистра - выражение «не число». Оно состоит из следующих частей:
- (необязательно) знак плюс или минус
-
NANилиNAN(char_sequence ), без учёта регистра в частиNAN. char_sequence может содержать только цифры, латинские буквы и символы подчёркивания. Результатом является значение NaN с плавающей точкой, не сигнализирующее. - любое другое выражение, которое может быть принято установленной в данный момент локалью C.
Если pos не является нулевым указателем, то ptr получит адрес первого непреобразованного символа в str.c_str(), а индекс этого символа будет вычислен и сохранён в *pos, указывая количество символов, обработанных при преобразовании.
Параметры
| str | - | строка для преобразования |
| pos | - | адрес целого числа, в котором будет сохранено количество обработанных символов |
Возвращаемое значение
Строка, преобразованная в указанный тип с плавающей точкой.
Исключения
std::invalid_argument, если преобразование не удалось выполнить.
std::out_of_range, если преобразованное значение выходит за пределы диапазона типа результата или если базовая функция (std::strtof, std::strtod или std::strtold) устанавливает errno в значение ERANGE.
Пример
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющих поведение, были применены ретроспективно к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 2009 | C++11 |
std::out_of_range не выбрасывалось, если преобразованноезначение выходило за пределы диапазона типа результата | будет выброшено |
| LWG 2403 | C++11 |
stof вызывал std::strtod или std::wcstod |
stof вызывает std::strtof или std::wcstof |
См. также
|
(C++11)(C++11)(C++11) | преобразует строку в целое число со знаком (функция) |
|
(C++11)(C++11) | преобразует строку в целое число без знака (функция) |
|
(C++17) | преобразует последовательность символов в целое число или значение с плавающей точкой (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string/stof