std::from_chars_result

来自cppreference.com
< cpp‎ | utility
在标头 <charconv> 定义
struct from_chars_result;
(C++17 起)

std::from_chars_resultstd::from_chars 的返回类型。它没有基类,并且只有以下成员。

目录

[编辑]数据成员

成员名字 定义
ptr
constchar* 类型的指针
(公开成员对象)
ec
std::errc 类型的错误码
(公开成员对象)

[编辑]成员和友元函数

operator==(std::from_chars_result)

friendbool operator==(const from_chars_result&,
                        const from_chars_result&)=default;
(C++20 起)

通过默认比较(它使用 operator== 分别比较 ptrec)比较两个实参。

此函数对常规的无限定有限定查找不可见,而只能在 std::from_chars_result 为实参的关联类时由实参依赖查找找到。

!= 运算符从 operator== 运算符合成

operator bool

constexprexplicit operator bool()constnoexcept;
(C++26 起)

检查转换是否成功。返回 ec ==std::errc{}

[编辑]注解

功能特性测试标准功能特性
__cpp_lib_to_chars201611L(C++17)初等字符串转换(std::to_charsstd::from_chars
202306L(C++26)检测 <charconv> 函数是否成功

[编辑]示例

#include <cassert>#include <charconv>#include <iomanip>#include <iostream>#include <optional>#include <string_view>#include <system_error>   int main(){for(std::string_viewconst str :{"1234", "15 foo", "bar", " 42", "5000000000"}){std::cout<<"字符串: "<<std::quoted(str)<<"。";int result{};auto[ptr, ec]=std::from_chars(str.data(), str.data()+ str.size(), result);   if(ec ==std::errc())std::cout<<"结果: "<< result <<", ptr -> "<<std::quoted(ptr)<<'\n';elseif(ec ==std::errc::invalid_argument)std::cout<<"这不是数值。\n";elseif(ec ==std::errc::result_out_of_range)std::cout<<"这个数值大于 int。\n";}   // C++23 的 constexpr from_char 演示 / C++26 的 operator bool() 演示:auto to_int =[](std::string_view s)->std::optional<int>{int value{};#if __cpp_lib_to_chars >= 202306Lif(std::from_chars(s.data(), s.data()+ s.size(), value))#elseif(std::from_chars(s.data(), s.data()+ s.size(), value).ec==std::errc{})#endifreturn value;elsereturnstd::nullopt;};   assert(to_int("42")==42);assert(to_int("foo")==std::nullopt);#if __cpp_lib_constexpr_charconv and __cpp_lib_optional >= 202106 static_assert(to_int("42")==42); static_assert(to_int("foo")==std::nullopt);#endif}

输出:

字符串: "1234"。结果: 1234, ptr -> "" 字符串: "15 foo"。结果: 15, ptr -> " foo" 字符串: "bar"。这不是数值。 字符串: " 42"。这不是数值。 字符串: "5000000000"。这个数值大于 int。

[编辑]参阅

(C++17)
转换字符序列到整数或浮点数
(函数)[编辑]
close