C++ 20 中的std::format及其在编译期的字符串格式检查
C++ 20 中引入的std::format是一个十分实用的工具,它的最大特点是能够在编译期检查字符串的格式是否正确,而且使用方法简单,只需要像普通函数一样传参即可。
std::format源自一个著名的开源库{fmt}。在C++ 20之前,{fmt}需要为每个字符串字面量创建不同的类型才能实现编译期格式检查。为了简化这一流程,{fmt}提供了一个FMT_STRING宏。
在C++ 20中引入了consteval后,使用起来更加简便。与以前的constexpr函数不同,consteval函数在任何情况下都强制编译期求值。std::format利用consteval函数在编译期执行代码来检查字符串参数的格式。
由于std::format本身不能是consteval函数,为了实现编译期的格式检查,引入了一个辅助类型std::format_string。这样字符串实参就能隐式转换为std::format_string,从而利用consteval函数在编译期执行代码来检查字符串的格式。
在实现一个简单版的format中,可以检查字符串中{}的数量是否与参数的个数相同。format_string的构造函数充当了隐式转换函数,它是一个consteval函数。若字符串中{}的数量不对,则代码会执行到throw这一行,由于throw语句不能在编译期求值,会导致编译错误,从而实现了在编译期检查出字符串的格式错误。
在format函数的参数中使用format_string
以上就是电脑114游戏给大家带来的关于C++ 20 中的std::format及其在编译期的字符串格式检查全部内容,更多攻略请关注电脑114游戏。
电脑114游戏-好玩游戏攻略集合版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!