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

来自cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
迭代器
容量
操作
搜索
常量
推导指引 (C++17)
非成员函数
I/O
比较
(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)    
stofstodstold
(C++11)(C++11)(C++11)
(C++11)
(C++11)
辅助类
 
在标头 <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 本地环境确定)(定义有效数字)
  • (可选) eE ,并跟随可选的正或负号,以及非空十进制数字序列(以 10 为底定义指数)
  • 十六进制浮点数表达式。它由下列部分组成:
  • (可选) 正或负号
  • 0x0X
  • 非空的十六进制数字序列,选地包含一个小数点字符(由当前的 C 本地环境确定)(定义有效数字)
  • (可选) pP ,并跟随可选的正或负号,以及非空十进制数字序列(以 2 为底定义指数)
  • 无穷大表达式。它由下列部分组成:
  • (可选) 正或负号
  • INFINFINITY ,忽略大小写
  • 非数(NaN)表达式。它由下列部分组成:
  • (可选) 正或负号
  • NANNAN(char_sequence) ,忽略 NAN 部分的大小写。 char_sequence 只能由数字、拉丁字母和下划线构成。结果是一个静态的 NaN 浮点值。

如果 pos 不是空指针,那么 ptr 将接受 str.c_str() 中首个未转换字符的地址,然后计算该字符的下标并将它存储到 *pos,给出转换处理的字符数。

参数

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

返回值

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

异常

无法进行转换时会抛出 std::invalid_argument

转换值会落在结果类型的范围外,或底层函数(即 std::strtofstd::strtodstd::strtold)将 errno 设置为 ERANGE 时会抛出 std::out_of_range

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 2009 C++11 在转换值会落在结果类型的范围外时不会抛出 std::out_of_range 会抛出
LWG 2403 C++11 stof 会调用 std::strtodstd::wcstod stof 会调用 std::strtofstd::wcstof

参阅

(C++11)(C++11)(C++11)
转换字符串为有符号整数
(函数)
(C++11)(C++11)
转换字符串为无符号整数
(函数)
转换字符序列到整数或浮点值
(函数)