命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | string‎ | basic_string
 
 
 
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 区域设置 确定)(定义有效数)
  • (可选) eE,后跟可选的减号或加号以及非空十进制数字序列(定义以 10 为底的指数)
  • 十六进制浮点表达式。它由以下部分组成:
  • (可选) 加号或减号
  • 0x0X
  • 非空十六进制数字序列,可选地包含小数点字符(由当前的 C 区域设置 确定)(定义有效数)
  • (可选) pP,后跟可选的减号或加号以及非空十进制数字序列(定义以 2 为底的指数)
  • 无穷大表达式。它由以下部分组成:
  • (可选) 加号或减号
  • INFINFINITY,不区分大小写
  • 非数字表达式。它由以下部分组成:
  • (可选) 加号或减号
  • NANNAN(char_sequence ),忽略 NAN 部分的大小写。char_sequence 只能包含数字、拉丁字母和下划线。结果是一个静默 NaN 浮点值。
  • 当前已安装的 C 区域设置 可能接受的任何其他表达式。

如果 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)
将字符串转换为无符号整数
(函数) [编辑]
将字符序列转换为整数或浮点值
(函数) [编辑]