Spec-Zone.ru › C++

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), соответственно.

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.

Если 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

См. также

stoistolstoll
(C++11)(C++11)(C++11)
преобразует строку в целое число со знаком
(функция)
stoulstoull
(C++11)(C++11)
преобразует строку в целое число без знака
(функция)
from_chars
(C++17)
преобразует последовательность символов в целое число или значение с плавающей точкой
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string/stof

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API