std::stof,s...,std::stold(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

🌸 NAME 🌸

Bestie, this is the std::stof,std::stod,std::stold page β€” a.k.a. std::stof,s...,std::stold(3) β€” from the C++ Standard Libary. It's the slay little family that reads floating-point numbers out of strings ✨

✨ SYNOPSIS ✨

Defined in header <string> πŸŽ€

  • (1) (since C++11) β€” float stof ( const std::string& str, std::size_t* pos = nullptr );
  • (2) (since C++11) β€” float stof ( const std::wstring& str, std::size_t* pos = nullptr );
  • (3) (since C++11) β€” double stod ( const std::string& str, std::size_t* pos = nullptr );
  • (4) (since C++11) β€” double stod ( const std::wstring& str, std::size_t* pos = nullptr );
  • (5) (since C++11) β€” long double stold( const std::string& str, std::size_t* pos = nullptr );
  • (6) (since C++11) β€” long double stold( const std::wstring& str, std::size_t* pos = nullptr );

Interprets a floating point value in a string str. No cap, that's literally the whole assignment πŸ’…

Let ptr be an internal (to the conversion functions) pointer of type char* (1,3,5) or wchar_t* (2,4,6), accordingly.

  1. Calls std::strtof(str.c_str(), &ptr).
  2. Calls std::wcstof(str.c_str(), &ptr).
  3. Calls std::strtod(str.c_str(), &ptr).
  4. Calls std::wcstod(str.c_str(), &ptr).
  5. Calls std::strtold(str.c_str(), &ptr).
  6. Calls std::wcstold(str.c_str(), &ptr).

πŸ’« the valid floating-point value menu πŸ’«

Function discards any whitespace characters (as determined by std::isspace) until first non-whitespace character is found. Then it takes as many characters as possible to form a valid floating-point representation and converts them to a floating-point value. The valid floating-point value can be one of the following:

  • decimal floating-point expression. It consists of the following parts:
    • (optional) plus or minus sign
    • nonempty sequence of decimal digits optionally containing decimal-point character (as determined by the current C locale) (defines significand)
    • (optional) e or E followed with optional minus or plus sign and nonempty sequence of decimal digits (defines exponent to base 10)
  • hexadecimal floating-point expression. It consists of the following parts:
    • (optional) plus or minus sign
    • 0x or 0X
    • nonempty sequence of hexadecimal digits optionally containing a decimal-point character (as determined by the current C locale) (defines significand)
    • (optional) p or P followed with optional minus or plus sign and nonempty sequence of decimal digits (defines exponent to base 2)
  • infinity expression. It consists of the following parts:
    • (optional) plus or minus sign
    • INF or INFINITY ignoring case
  • not-a-number expression. It consists of the following parts:
    • (optional) plus or minus sign
    • NAN or NAN(char_sequence) ignoring case of the NAN part. char_sequence can only contain digits, Latin letters, and underscores. The result is a quiet NaN floating-point value.
  • any other expression that may be accepted by the currently installed C locale

If pos is not a null pointer, then ptr will receive the address of the first unconverted character in str.c_str(), and the index of that character will be calculated and stored in *pos, giving the number of characters that were processed by the conversion. Tracked, bestie 🫢

πŸ’– PARAMETERS πŸ’–

  • str β€” the string to convert.
  • pos β€” address of an integer to store the number of characters processed.

🫢 RETURN VALUE 🫢

The string converted to the specified floating point type. That's the whole tea β˜•

😭 EXCEPTIONS 😭

  • std::invalid_argument if no conversion could be performed.
  • std::out_of_range if the converted value would fall out of the range of the result type or if the underlying function (std::strtof, std::strtod or std::strtold) sets errno to ERANGE.

πŸ¦‹ EXAMPLE πŸ¦‹

This section is incomplete 😭 Reason: no example.

πŸ”₯ DEFECT REPORTS πŸ”₯

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

  • DR LWG 2009 β€” applied to C++11. Behavior as published: std::out_of_range would not be thrown if the converted value would fall out of the range of the result type. Correct behavior: will throw.
  • DR LWG 2403 β€” applied to C++11. Behavior as published: stof called std::strtod or std::wcstod. Correct behavior: stof calls std::strtof or std::wcstof.

🌈 SEE ALSO 🌈

  • stoi (C++11), stol (C++11), stoll (C++11) β€” converts a string to a signed integer (function).
  • stoul (C++11), stoull (C++11) β€” converts a string to an unsigned integer (function).
  • from_chars (C++17) β€” converts a character sequence to an integer or floating-point value (function).

πŸŽ€ CATEGORY πŸŽ€

  • * Todo no example

Source/version: http://cppreference.com Β· date: 2024.06.10 β€” mwah, bestie πŸ’‹πŸ«Ά

πŸ“¦ where this page comes from