Namespaces
Variants

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

ja.cppreference.net より
 
 
 
std::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 内の浮動小数点値を解釈します。

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 で判定) を破棄します。その後、有効な浮動小数点表現を形成するために可能な限り多くの文字を取り、それらを浮動小数点値に変換します。有効な浮動小数点値は以下のいずれかです:

  • 10進浮動小数点式。以下の部分から構成されます:
  • (任意) プラスまたはマイナス記号
  • 現在の C ロケール によって決定される小数点文字を任意に含む、空でない10進数字の並び (仮数を定義)
  • (任意) e または E の後に、任意のマイナスまたはプラス記号と、空でない10進数字の並びが続くもの (基数 10 の指数を定義)
  • 16進浮動小数点式。以下の部分から構成されます:
  • (任意) プラスまたはマイナス記号
  • 0x または 0X
  • 現在の C ロケール によって決定される小数点文字を任意に含む、空でない16進数字の並び (仮数を定義)
  • (任意) p または P の後に、任意のマイナスまたはプラス記号と、空でない10進数字の並びが続くもの (基数 2 の指数を定義)
  • 無限大表現。以下の部分から構成されます:
  • (任意) プラスまたはマイナス記号
  • INF または INFINITY 大文字小文字を区別しない
  • 非数 (NaN) 表現。以下の部分から構成されます:
  • (任意) プラスまたはマイナス記号
  • NAN または NAN(char_sequence ) NAN の部分は大文字小文字を区別しない。 char_sequence は、数字、ラテン文字、およびアンダースコアのみを含むことができる。結果は quiet 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)
文字列を符号付き整数に変換する
(関数)
(C++11) (C++11)
文字列を符号なし整数に変換する
(関数)
(C++17)
文字シーケンスを整数または浮動小数点値に変換する
(関数)