Namespaces
Variants

std:: stof, std:: stod, std:: stold

From cppreference.net
std::basic_string
Определено в заголовочном файле <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) соответственно.

1) Вызывает std:: strtof ( str. c_str ( ) , & ptr ) .
2) Вызывает std:: wcstof ( str. c_str ( ) , & ptr ) .
3) Вызывает std:: strtod ( str. c_str ( ) , & ptr ) .
4) Вызывает std:: wcstod ( str. c_str ( ) , & ptr ) .
5) Вызывает std:: strtold ( str. c_str ( ) , & ptr ) .
6) Вызывает 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 locale .

Если pos не является нулевым указателем, то ptr получит адрес первого неконвертированного символа в str. c_str ( ) , а индекс этого символа будет вычислен и сохранён в * pos , указывая количество символов, обработанных при конвертации.

Содержание

Параметры

str - строка для преобразования
pos - адрес целого числа для хранения количества обработанных символов

Возвращаемое значение

Строка, преобразованная в указанный тип с плавающей точкой.

Исключения

std::invalid_argument если не удалось выполнить преобразование.

std::out_of_range если преобразуемое значение выходит за пределы диапазона результирующего типа или если базовая функция ( std::strtof , std::strtod или std::strtold ) устанавливает errno в ERANGE .

Пример

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
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)
преобразует последовательность символов в целое число или число с плавающей запятой
(функция)