std::from_chars

来自cppreference.com
< cpp‎ | utility
定义于头文件 <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;
    std::errc ec;

};
(5) (C++17 起)

按照后述模式分析字符序列 [first,last) 。若无字符匹配模式或若按照分析匹配字符获得的值不能以 value 的类型表示,则不修改 value ,否则将匹配模式的字符转译成算术值的文本表示,并将值存储于 value

1) 整数分析函数:期待等同于 std::strtol 于默认( "C" )本地环境所使用者相同的模式,并给定非零整数底,除了
  • 对底 16 不识别 "0x" 或 "0X" 前缀
  • 仅识别负号(不识别正号),而且只针对 value 的有符号整数类型。
库为所有有符号和无符号整数类型和 char 提供重载,这些类型是参数 value 的被引用类型。
2-4) 浮点分析函数:期待期待等同于 std::strtod 于默认( "C" )本地环境所使用者相同的模式,除了 任何情况下,按照 std::round_to_nearest 舍入后,结果值是至多二个最接近匹配模式的字符串的值的浮点值之一。
5) 返回值类型(见后述返回值)

参数

first, last - 要分析的合法字符范围
value - 存储被分析值的输出参数,若分析成功
base - 使用的整数基底: 2 与 36 间的值(含上下限)。
fmt - 使用的浮点格式, std::chars_format 类型的位掩码

返回值

成功时,返回 from_chars_result 类型的值,其 ptr 指向首个不匹配模式的字符,或若所有字符皆匹配则指向拥有等于 last 的值,其 ec 被值初始化。

若无可匹配的模式,则返回 from_chars_result 类型的值,其 ptr 等于 firstec 等于 std::errc::invalid_argument 。不修改 value

若模式匹配,但被分析值不在 value 的类型所表示的范围内,则返回 from_chars_result 类型的值,其 ec 等于 std::errc::result_out_of_rangeptr 指向首个不匹配模式的字符。不修改 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> 的公开成员函数)