Spec-Zone.ru › C++

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

Defined in header <string>
float       stof ( const std::string& str, std::size_t* pos = nullptr );
(1) (since C++11)
float       stof ( const std::wstring& str, std::size_t* pos = nullptr );
(2) (since C++11)
double      stod ( const std::string& str, std::size_t* pos = nullptr );
(3) (since C++11)
double      stod ( const std::wstring& str, std::size_t* pos = nullptr );
(4) (since C++11)
long double stold( const std::string& str, std::size_t* pos = nullptr );
(5) (since C++11)
long double stold( const std::wstring& str, std::size_t* pos = nullptr );
(6) (since 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 locale) (определяет мантиссу)
    • (необязательно) e или E, за которыми следует необязательный знак минус или плюс и непустая последовательность десятичных цифр (определяет экспоненту по основанию 10)
  • шестнадцатеричное представление с плавающей запятой. Оно состоит из следующих частей:
    • (необязательно) знак плюс или минус
    • 0x или 0X
    • непустая последовательность шестнадцатеричных цифр, необязательно содержащая десятичную точку (как определено текущим C locale) (определяет мантиссу)
    • (необязательно) p или P, за которыми следует необязательный знак минус или плюс и непустая последовательность десятичных цифр (определяет экспоненту по основанию 2)
  • бесконечность. Она состоит из следующих частей:
    • (необязательно) знак плюс или минус
    • INF или INFINITY (регистр игнорируется)
  • не число. Она состоит из следующих частей:
    • (необязательно) знак плюс или минус
    • NAN или NAN(последовательность_символов) (регистр части NAN игнорируется). последовательность_символов может содержать только цифры, латинские буквы и символы подчёркивания. Результатом является тихий NaN (Not a Number) с плавающей запятой.
  • любое другое представление, которое может быть принято текущим 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 Применён к Поведение, опубликованное Корректное поведение
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/w/cpp/string/basic_string/stof

Spec-Zone.ru

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