std::from_chars
来自cppreference.com
定义于头文件 <charconv>
|
||
std::from_chars_result from_chars(const char* first, const char* last, /*see below*/& value, int base = 10); |
(1) | (C++17 起) |
std::from_chars_result from_chars(const char* first, const char* last, float& value, std::chars_format fmt = std::chars_format::general); |
(2) | (C++17 起) |
std::from_chars_result from_chars(const char* first, const char* last, double& value, std::chars_format fmt = std::chars_format::general); |
(3) | (C++17 起) |
std::from_chars_result from_chars(const char* first, const char* last, long double& value, std::chars_format fmt = std::chars_format::general); |
(4) | (C++17 起) |
struct from_chars_result { const char* ptr; |
(5) | (C++17 起) |
按照后述模式分析字符序列 [first,last)
。若无字符匹配模式或若按照分析匹配字符获得的值不能以 value
的类型表示,则不修改 value
,否则将匹配模式的字符转译成算术值的文本表示,并将值存储于 value
。
1) 整数分析函数:期待等同于 std::strtol 于默认( "C" )本地环境所使用者相同的模式,并给定非零整数底,除了
- 对底 16 不识别 "0x" 或 "0X" 前缀
- 仅识别负号(不识别正号),而且只针对
value
的有符号整数类型。
char
提供重载,这些类型是参数 value
的被引用类型。2-4) 浮点分析函数:期待期待等同于 std::strtod 于默认( "C" )本地环境所使用者相同的模式,除了
- 不识别指数外的正号(只容许在起始的负号)
- 若
fmt
设置了 std::chars_format::scientific 而无 std::chars_format::fixed ,则要求指数部分(否则可选) - 若
fmt
设置了 std::chars_format::fixed 而无 std::chars_format::scientific ,则不允许可选的指数部分 - 若
fmt
为 std::chars_format::hex ,则不允许前缀 "0x" 或 "0X" (字符串 "0x123" 分析为值 "0" 和未分析的剩余 "x123" )。
5) 返回值类型(见后述返回值)
参数
first, last | - | 要分析的合法字符范围 |
value | - | 存储被分析值的输出参数,若分析成功 |
base | - | 使用的整数基底: 2 与 36 间的值(含上下限)。 |
fmt | - | 使用的浮点格式, std::chars_format 类型的位掩码 |
返回值
成功时,返回 from_chars_result
类型的值,其 ptr
指向首个不匹配模式的字符,或若所有字符皆匹配则指向拥有等于 last
的值,其 ec
被值初始化。
若无可匹配的模式,则返回 from_chars_result
类型的值,其 ptr
等于 first
且 ec
等于 std::errc::invalid_argument 。不修改 value
。
若模式匹配,但被分析值不在 value
的类型所表示的范围内,则返回 from_chars_result
类型的值,其 ec
等于 std::errc::result_out_of_range 且 ptr
指向首个不匹配模式的字符。不修改 value
。
异常
(无)
注意
不同于 C++ 和 C 库中的其他格式化函数, std::from_chars
是独立于本地环境、不分配、不抛出的。它只提供其他库(例如 std::sscanf )所用策略的一个小子集。它的目的是在常见的高吞吐量环境,例如基于文本的交换( JSON 或 XML )中,允许尽可能快的实现。
仅当两个函数都来自同一实现的情况下,才保证 std::from_chars 能恢复每个由 to_chars
格式化的浮点值。
由无后随数位的符号组成的模式被当做不匹配任何内容的模式。
示例
运行此代码
#include <iostream> #include <charconv> #include <array> int main() { std::array<char, 10> str{"42"}; int result; std::from_chars( str.data(), str.data()+str.size(),result ); std::cout << result; return 0; }
输出:
42
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2955 | C++17 | 此函数在 <utility> 并使用 std::error_code | 移动到 <charconv> 并使用 std::errc |
参阅
from_chars (C++17) |
转换字符序列到整数或浮点值 (函数) |
(C++11)(C++11)(C++11) |
转换字符串为有符号整数 (函数) |
(C++11)(C++11)(C++11) |
转换字符串为浮点值 (函数) |
转换字节字符串为整数值 (函数) | |
转换字节字符串为浮点值 (函数) | |
从 stdin、文件流或缓冲区读取有格式输入 (函数) | |
提取带格式数据 ( std::basic_istream<CharT,Traits> 的公开成员函数) |