std::stof、std::stod、std::stold
来自 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 中的浮点值。
令 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 区域设置 确定)(定义尾数)
- (可选)
e
或E
后跟可选的正负号和非空十进制数字序列(定义以 10 为底的指数)
- 十六进制浮点表达式。它包含以下部分
- (可选) 正负号
-
0x
或0X
- 非空十六进制数字序列,可选地包含小数点字符(由当前 C 区域设置 确定)(定义尾数)
- (可选)
p
或P
后跟可选的正负号和非空十进制数字序列(定义以 2 为底的指数)
- 无穷大表达式。它包含以下部分
- (可选) 正负号
-
INF
或INFINITY
,忽略大小写
- 非数表达式。它包含以下部分
- (可选) 正负号
-
NAN
或NAN(
char_sequence)
,忽略NAN
部分的大小写。char_sequence 只能包含数字、拉丁字母和下划线。结果是一个静默 NaN 浮点值。
- 当前安装的 C 区域设置 可能接受的任何其他表达式
如果 pos 不是空指针,则 ptr 将接收 str.c_str() 中第一个未转换字符的地址,并且该字符的索引将被计算并存储在 *pos 中,给出转换过程中处理的字符数。
内容 |
[编辑] 参数
str | - | 要转换的字符串 |
pos | - | 存储处理字符数量的整数的地址 |
[编辑] 返回值
转换为指定浮点类型的字符串。
[编辑] 异常
如果无法执行转换,则为 std::invalid_argument。
如果转换后的值超出结果类型的范围,或者基础函数(std::strtof,std::strtod 或 std::strtold)将 errno 设置为 ERANGE,则为 std::out_of_range。
[编辑] 示例
本部分尚未完善 原因:没有示例 |
[编辑] 缺陷报告
以下行为变更缺陷报告已追溯应用于先前发布的 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) |
将字符序列转换为整数或浮点值 (函数) |