std::stof, std::stod, std::stold
From cppreference.com
< cpp | string | 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 の浮動小数点値を解釈します。
それぞれ char* (1,3,5) または wchar_t* (2,4,6) 型の、変換関数内部のポインタを char* または wchar_t* とします。
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 で決定される空白文字をすべて破棄します。次に、有効な浮動小数点表現を形成するために可能な限り多くの文字を取得し、それらを浮動小数点値に変換します。有効な浮動小数点値は、次のいずれかになります。
- 10進数浮動小数点表記。以下の部分から構成されます。
- (任意)プラスまたはマイナスの記号
- 10進数字の非空のシーケンス。オプションで小数点文字(現在のC ロケールによって決定される)を含む(シグニフィカンドを定義する)。
- (任意)
eまたはE、それにオプションのマイナスまたはプラス記号と10進数字の非空のシーケンスが続く(10を底とする指数を定義する)。
- 16進数浮動小数点表記。以下の部分から構成されます。
- (任意)プラスまたはマイナスの記号
-
0xまたは0X - 16進数字の非空のシーケンス。オプションで小数点文字(現在のC ロケールによって決定される)を含む(シグニフィカンドを定義する)。
- (任意)
pまたはP、それにオプションのマイナスまたはプラス記号と10進数字の非空のシーケンスが続く(2を底とする指数を定義する)。
- 無限大表記。以下の部分から構成されます。
- (任意)プラスまたはマイナスの記号
-
INFまたはINFINITY(大文字・小文字を区別しない)。
- 非数(NaN)表記。以下の部分から構成されます。
- (任意)プラスまたはマイナスの記号
-
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++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| 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) |
文字列を符号付き整数に変換する (function) |
| (C++11)(C++11) |
文字列を符号なし整数に変換する (function) |
| (C++17) |
文字シーケンスを整数値または浮動小数点数値に変換する (関数) |