c++17 to_chars、from_chars、if、结构化绑定

  • 说明
    • std::to_chars
    • std::from_chars
  • 示例代码
  • 输出
  • 参考

说明

std::to_chars

通过成功填充范围 [first, last) ,转换 value 为字符串,要求 [first, last) 是合法范围。

  1. 整数格式化函数: value 以给定基底 base 转换成数位的字符串(无冗余的前导零)。范围 10…35 (含上下限)中的数字被表示成小写字母 a…z 。若值小于零,则表示以负号起始。库提供所有有符号及无符号整数和 char 类型作为参数 value 类型的重载。
  2. bool 的重载被删除。 to_chars 拒绝 bool 类型参数,因为假如允许则结果会是 “0”/“1” 而非 “false”/“true” 。
  3. 如同用 std::sprintf 于默认( “C” )本地环境转换值为字符串。转换指定符是 f 或 e ,根据最短表示方式的要求选择(两者相当时优先选择 f ):字符串表示由小数点(若存在)前至少有一位,且用对应的 std::from_chars 分析该表示能准确恢复值的,最小数量的字符组成。若有数个这种表示,则选择到 value 的差最小者,用根据 std::round_to_nearest 的舍入解决任何剩余倾向
  4. 同 (3) ,但若 fmt 为 std::chars_format::fixed 则如同对应 printf 的转换指定为 f ,若 fmt 为 std::chars_format::scientific 则为 e ,若 fmt 为 std::chars_format::hex 则为 a (但结果无前导 “0x” ),且若 fmt 为 chars_format::general 则为 g 。
  5. 同 (4) ,除了精度以参数 precision 指定,而非以最短表示要求。
  6. 返回类型(见后述返回值)。 std::to_chars_result 无基类或 ptr 、 ec 及隐式声明的特殊成员函数以外的成员。
    参数
    first, last - 要写入的字符范围
    value - 要转换到其字符串表示的值
    base - 使用的整数基底: 2 与 36 间的值(含上下限)。
    fmt - 使用的浮点格式, std::chars_format 类型的位掩码
    precision - 使用的浮点精度
    返回值
    成功时,返回 to_chars_result 类型的值,其 ec 等于值初始化的 std::errc ,且其 ptr 是指向被写入字符尾后一位置的指针。注意该字符串不是空终止的。
    错误时,返回 to_chars_result 类型的值,它在 ec 保有 std::errc::value_too_large 于 ,在 ptr 保有 last ,并于范围 [first, last) 中留下未指定状态的内容。

std::from_chars

按照后述模式分析字符序列 [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” )。
    任何情况下,按照 std::round_to_nearest 舍入后,结果值是至多二个最接近匹配模式的字符串的值的浮点值之一。
  2. 返回值类型(见后述返回值)。 std::from_chars_result 无基类或 ptr 、 ec 及隐式声明的特殊成员函数以外的成员。
    参数
    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 。

示例代码

#include <iostream>
#include <charconv>
#include <system_error>
#include <string_view>
#include <array>struct StructBind {int a;std::string b;
};StructBind Test(const int a,  const std::string& b)
{StructBind ss;ss.a = a;ss.b = b;return ss;
}/*
std::to_chars
通过成功填充范围 [first, last) ,转换 value 为字符串,要求 [first, last) 是合法范围。
1) 整数格式化函数: value 以给定基底 base 转换成数位的字符串(无冗余的前导零)。范围 10..35 (含上下限)中的数字被表示成小写字母 a..z 。若值小于零,则表示以负号起始。库提供所有有符号及无符号整数和 char 类型作为参数 value 类型的重载。
2) bool 的重载被删除。 to_chars 拒绝 bool 类型参数,因为假如允许则结果会是 "0"/"1" 而非 "false"/"true" 。
3) 如同用 std::sprintf 于默认( "C" )本地环境转换值为字符串。转换指定符是 f 或 e ,根据最短表示方式的要求选择(两者相当时优先选择 f ):字符串表示由小数点(若存在)前至少有一位,且用对应的 std::from_chars 分析该表示能准确恢复值的,最小数量的字符组成。若有数个这种表示,则选择到 value 的差最小者,用根据 std::round_to_nearest 的舍入解决任何剩余倾向
4) 同 (3) ,但若 fmt 为 std::chars_format::fixed 则如同对应 printf 的转换指定为 f ,若 fmt 为 std::chars_format::scientific 则为 e ,若 fmt 为 std::chars_format::hex 则为 a (但结果无前导 "0x" ),且若 fmt 为 chars_format::general 则为 g 。
5) 同 (4) ,除了精度以参数 precision 指定,而非以最短表示要求。
6) 返回类型(见后述返回值)。 std::to_chars_result 无基类或 ptr 、 ec 及隐式声明的特殊成员函数以外的成员。
参数
first, last -   要写入的字符范围
value   -   要转换到其字符串表示的值
base    -   使用的整数基底: 2 与 36 间的值(含上下限)。
fmt -   使用的浮点格式, std::chars_format 类型的位掩码
precision   -   使用的浮点精度
返回值
成功时,返回 to_chars_result 类型的值,其 ec 等于值初始化的 std::errc ,且其 ptr 是指向被写入字符尾后一位置的指针。注意该字符串不是空终止的。
错误时,返回 to_chars_result 类型的值,它在 ec 保有 std::errc::value_too_large 于 ,在 ptr 保有 last ,并于范围 [first, last) 中留下未指定状态的内容。std::from_chars
按照后述模式分析字符序列 [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" )。
任何情况下,按照 std::round_to_nearest 舍入后,结果值是至多二个最接近匹配模式的字符串的值的浮点值之一。
5) 返回值类型(见后述返回值)。 std::from_chars_result 无基类或 ptr 、 ec 及隐式声明的特殊成员函数以外的成员。
参数
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 。
*/int main()
{std::array<char, 10> str;// c++ 17 if ( ; )int a{ 1 }, b{ 0 };if (a = b; 0 == a)std::cout << "a:"<<a <<", b:" << b << "\n";// c++17 auto [c, d] = Test(1, "2");std::cout << "c:" << c << ", d:"<<d << "\n";// 进阶版    // to_charsif (auto [p, ec] = std::to_chars(str.data(), str.data() + str.size(), 255, 16); ec == std::errc()){std::cout << "str:\t" << std::string_view(str.data(), p - str.data()) << "\n";}std::array<char, 10> str2{"123.456"};double value{ 0 };// from_charsif (auto [p, ec] = std::from_chars(str2.data(), str2.data() + str2.size(), value, std::chars_format::general); ec == std::errc()){std::cout << "value:\t" << value << "\n";}return 0;
}

输出

a:0, b:0
c:1, d:2
str:    ff
value:  123.456

参考

https://zh.cppreference.com/w/cpp/utility/from_chars
https://zh.cppreference.com/w/cpp/utility/to_chars

c++17 to_chars、from_chars、if、结构化绑定相关推荐

  1. C2429 语言功能“结构化绑定“需要编译器标志“/std:c++17“

    C2429 语言功能"结构化绑定"需要编译器标志"/std:c++17" 1.问题 vs2019打开工程时报错:C2429 语言功能"结构化绑定&qu ...

  2. 变量之--列表初始化和结构化绑定

    变量之(变长)列表初始化 关键词 std::initializer_list 解释 在 C++98/03 中的对象初始化方法有很多种,这无疑增大了学习难度.这中情况在C++11中终于得到解决. 先看看 ...

  3. 【C++grammar】结构化绑定

    目录 定义 1.用于原生数组的结构化绑定声明 2.用于std::array的结构化绑定声明 3.用于对象数据成员的结构化绑定声明 定义 结构化绑定声明是一个声明语句,意味着声明了一些标识符并对标识符做 ...

  4. 计算机教师结构化方式面试,市计算机:17名学生通过全国教师资格证结构化面试...

    近日,从教育考试部门获悉,我校2017级学前教育专业23名学生首次参加全国教师资格证结构化面试考试,17人顺利通过教资结构化面试,通过率高达73.91%,在全省中职学校学前教育专业此类考试中名列前茅. ...

  5. Bigtable:一个分布式的结构化数据存储系统(转)

    为了方便部分博友和我自己,我特地将BigTable的中文版论文转载到本博客,原文地址在Google Labs,译者为alex. Wiki百科关于 BigTable的解释: http://en.wiki ...

  6. Python爬虫新手进阶版:怎样读取非结构化网页、图像、视频、语音数据

    导读:常见的数据来源和获取方式,你或许已经了解很多.本文将拓展数据来源方式和格式的获取,主要集中在非结构化的网页.图像.视频和语音. 01 从网页中爬取运营数据 要从网页中爬虫数据,可使用Python ...

  7. 谷歌三大论文之--Bigtable:一个分布式的结构化数据存储系统

    Bigtable:一个分布式的结构化数据存储系统 译者:alex 摘要 Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据.Goo ...

  8. Bigtable:一个分布式的结构化数据存储系统

    Bigtable:一个分布式的结构化数据存储系统 本文的英文原文为Google在2006年发布的Google Bigtable paper 本文的翻译版本由Alex完成,原文地址为: http://b ...

  9. shell基础04 结构化命令

    几乎和别的编程语言思想一样,只是关键字写法稍有不同.总结主要包括如下几种:if-then,for,while 1. if-then 格式: if command    #根据command的状态码是否 ...

最新文章

  1. Java项目:控制台商城系统(java+打印控制台)
  2. 字母全排列快速算法C代码
  3. 048_CSS3用户界面
  4. 42.移动构造函数的合成规则
  5. 灰色简约三级CSS下拉菜单代码
  6. getplotlyoffline(‘http://cdn.plot.ly/plotly-latest.min.js‘)无法下载如何解决
  7. sqlserver没有维护计划_设定数据库备份计划,安全放心不怕事!
  8. 火狐浏览器服务器意外响应,Firefox 火狐浏览器 83 发布,已修复任意代码执行漏洞...
  9. 回顾-离开帝都半年了
  10. LeetCode MySQL 1126. 查询活跃业务
  11. 深度学习推荐模型-DeepFM
  12. 【已解决】平板远程控制WIN10电脑
  13. cad命令栏还原默认_将CAD恢复到默认界面的两种方法,来看看吧
  14. 适合入门的linux教程,Linux入门记录系列教程,适合Linux初学者阅读
  15. 圆弧周长公式_扇形面积和周长计算公式 【关于扇形的所有公式(周长、弧长、半径、圆心角)写得清楚、详细......
  16. TortoiseGit状态图标不能正常显示的解决办法
  17. 开发人员系统功能设计常用办公软件分享
  18. 小白想进入IT行业,迷茫选什么职业?
  19. 待支付模板html,待支付.html
  20. 安装vue环境,并新建Vue项目

热门文章

  1. 【ABAQUS】搞定ABAQUS与SolidWorks2无缝集成
  2. 正则表达式--前缀r
  3. 51单片机外设篇:数码管
  4. HistCite使用说明
  5. 名画50 张择端《清明上河图》
  6. 设计模式之访问者模式
  7. c++头文件|源文件详解
  8. 牛客网华为云服务器,【华为云】-搭建私有云盘心得体会
  9. 星图达人数据采集接口
  10. MATLAB读取BP原始数据