Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
Definiert in Header <string>
float       stof ( const std::string& str, std::size_t* pos = nullptr );
(1) (seit C++11)
float       stof ( const std::wstring& str, std::size_t* pos = nullptr );
(2) (seit C++11)
double      stod ( const std::string& str, std::size_t* pos = nullptr );
(3) (seit C++11)
double      stod ( const std::wstring& str, std::size_t* pos = nullptr );
(4) (seit C++11)
long double stold( const std::string& str, std::size_t* pos = nullptr );
(5) (seit C++11)
long double stold( const std::wstring& str, std::size_t* pos = nullptr );
(6) (seit C++11)

Interpretiert einen Fließkommawert in einem String str.

Sei ptr ein interner (innerhalb der Konvertierungsfunktionen) Zeiger vom Typ char* (1,3,5) oder wchar_t* (2,4,6), je nach Fall.

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

Die Funktion verwirft beliebige Leerzeichen (wie von std::isspace bestimmt), bis das erste Nicht-Leerzeichen gefunden wird. Dann nimmt sie so viele Zeichen wie möglich, um eine gültige Gleitkommadarstellung zu bilden, und konvertiert sie in einen Gleitkommawert. Der gültige Gleitkommawert kann einer der folgenden sein:

  • Dezimale Gleitkomma-Ausdrücke. Sie bestehen aus den folgenden Teilen:
  • (optional) Vorzeichen (+ oder -)
  • Nichtleere Sequenz von Dezimalziffern, die optional ein Dezimaltrennzeichen enthält (wie von der aktuellen C Locale bestimmt) (definiert den Significand)
  • (optional) e oder E gefolgt von einem optionalen Minus- oder Pluszeichen und einer nichtleeren Sequenz von Dezimalziffern (definiert den Exponenten zur Basis 10)
  • Hexadezimale Gleitkomma-Ausdrücke. Sie bestehen aus den folgenden Teilen:
  • (optional) Vorzeichen (+ oder -)
  • 0x oder 0X
  • Nichtleere Sequenz von Hexadezimalziffern, die optional ein Dezimaltrennzeichen enthält (wie von der aktuellen C Locale bestimmt) (definiert den Significand)
  • (optional) p oder P gefolgt von einem optionalen Minus- oder Pluszeichen und einer nichtleeren Sequenz von Dezimalziffern (definiert den Exponenten zur Basis 2)
  • Unendlichkeits-Ausdrücke. Sie bestehen aus den folgenden Teilen:
  • (optional) Vorzeichen (+ oder -)
  • INF oder INFINITY (Groß-/Kleinschreibung wird ignoriert)
  • Nicht-eine-Zahl-Ausdrücke. Sie bestehen aus den folgenden Teilen:
  • (optional) Vorzeichen (+ oder -)
  • NAN oder NAN(char_sequence ) (Groß-/Kleinschreibung des Teils NAN wird ignoriert). char_sequence darf nur Ziffern, lateinische Buchstaben und Unterstriche enthalten. Das Ergebnis ist ein Quiet-NaN-Gleitkommawert.
  • Andere Ausdrücke, die von der aktuell installierten C Locale akzeptiert werden könnten.

Wenn pos kein Nullzeiger ist, empfängt ptr die Adresse des ersten nicht konvertierten Zeichens in str.c_str() und der Index dieses Zeichens wird berechnet und in *pos gespeichert, was die Anzahl der vom Konvertierungsprozess verarbeiteten Zeichen angibt.

Inhalt

[bearbeiten] Parameter

str - der zu konvertierende String
pos - Adresse eines Integers, um die Anzahl der verarbeiteten Zeichen zu speichern

[bearbeiten] Rückgabewert

Der in den angegebenen Fließkommatyp konvertierte String.

[bearbeiten] Ausnahmen

std::invalid_argument, wenn keine Konvertierung durchgeführt werden konnte.

std::out_of_range, wenn der konvertierte Wert außerhalb des Bereichs des Ergebnistyps liegt oder wenn die zugrunde liegende Funktion (std::strtof, std::strtod oder std::strtold) errno auf ERANGE setzt.

[bearbeiten] Beispiel

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 2009 C++11 std::out_of_range würde nicht ausgelöst, wenn der konvertierte
Wert außerhalb des Bereichs des Ergebnistyps liegen würde
wirft
LWG 2403 C++11 stof rief std::strtod oder std::wcstod auf stof ruft std::strtof oder std::wcstof auf

[bearbeiten] Siehe auch

(C++11)(C++11)(C++11)
konvertiert einen String in eine vorzeichenbehaftete Ganzzahl
(function) [edit]
(C++11)(C++11)
konvertiert einen String in eine vorzeichenlose Ganzzahl
(function) [edit]
konvertiert eine Zeichensequenz in einen Ganzzahl- oder Gleitkommawert
(Funktion) [bearbeiten]