Boost Format のドキュメントには次のように書かれています。
その目標の 1 つは、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);
}
出力は次のとおりです。
ブーストフォーマット: A:A:A:65
printf:65:41:A:65
違いは、char を整数型として表示する場合です。
なぜ違いがあるのですか?これはバグですか、それとも望ましい動作ですか?