ToB*_*oBe 6 c c++ printf boost boost-format
它的目标之一是提供 printf 的替代品,这意味着 format 可以解析为 printf 设计的格式字符串,将其应用于给定的参数,并产生与 printf 相同的结果。
当我使用相同的格式字符串比较 boost:format 和 printf 的输出时,我得到了不同的输出。在线示例在这里
#include <iostream>
#include <boost/format.hpp>
int main()
{
boost::format f("BoostFormat:%d:%X:%c:%d");
unsigned char cr =65; //'A'
int cr2i = int(cr);
f % cr % cr % cr % cr2i;
std::cout << f << std::endl;
printf("Printf:%d:%X:%c:%d",cr,cr,cr,cr2i);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
升压格式: A:A:A:65
打印输出: 65:41:A:65
不同之处在于当我想将字符显示为整数类型时。
为什么有区别?这是一个错误还是想要的行为?
这是预期的行为。
在boost 手册中,它描述了您使用的经典类型规范:
但是 printf 的经典类型规范标志在格式上的意义较弱。它仅在内部流和/或格式化参数上设置适当的标志,但不要求相应的参数为特定类型。
另请注意,在 stdlib-printf 调用中char,int由于 vararg调用,所有参数都会自动转换为。所以生成的代码与:
printf("Printf:%d:%X:%c:%d",cr2i,cr2i,cr2i,cr2i);
Run Code Online (Sandbox Code Playgroud)
这种自动转换不是由%操作员完成的。
| 归档时间: |
|
| 查看次数: |
1375 次 |
| 最近记录: |