Namespaces
Variants

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

From 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 确定),直至找到首个非空白字符。随后尽可能提取组成有效浮点数表示形式的字符,并将其转换为浮点数值。有效浮点数值可以是以下形式之一:

  • 十进制浮点表达式。它由以下部分组成:
  • (可选) 正负号
  • 非空的十进制数字序列,可选包含小数点字符(由当前 C locale 决定)(定义有效数字)
  • (可选) e E 后接可选的减号或加号以及非空的十进制数字序列(定义以 10 为底的指数)
  • 十六进制浮点表达式。它由以下部分组成:
  • (可选) 正负号
  • 0x 0X
  • 非空的十六进制数字序列,可选包含小数点字符(由当前 C locale 决定)(定义有效数字)
  • (可选) p P 后接可选的减号或加号以及非空的十进制数字序列(定义以 2 为底的指数)
  • infinity 表达式。它由以下部分组成:
  • (可选) 正负号
  • INF INFINITY (不区分大小写)
  • not-a-number 表达式。它由以下部分组成:
  • (可选) 正负号
  • NAN NAN( 字符序列  ) (忽略 NAN 部分的大小写)。 字符序列 只能包含数字、拉丁字母和下划线。结果为静默 NaN 浮点数值。
  • 任何其他可能被当前安装的 C locale 接受的表达式。

如果 pos 不是空指针,那么 ptr 将接收 str. c_str ( ) 中第一个未转换字符的地址,该字符的索引将被计算并存储到 * pos 中,表示转换处理过的字符数量。

目录

参数

str - 要转换的字符串
pos - 用于存储已处理字符数的整数地址

返回值

转换为指定浮点类型的字符串。

异常

std::invalid_argument 若无法执行任何转换。

若转换后的值超出结果类型的范围,或底层函数( std::strtof std::strtod std::strtold )将 errno 设置为 ERANGE ,则抛出 std::out_of_range

示例

缺陷报告

下列行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用范围 发布时的行为 正确行为
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)
将字符序列转换为整数或浮点数值
(函数)