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);
}
Выход:
BoostFormat: A:A:A:65
Printf: 65:41:A:65
Разница в том, когда я хочу отобразить символ в виде целого типа.
Почему есть разница? Это ошибка или желаемое поведение?
Это ожидаемое поведение.
в повысить руководство написано о классической спецификации типа, которую вы используете:
Но классический флаг спецификации типа printf имеет более слабый
смысл в формате. Он просто устанавливает соответствующие флаги на
внутренний поток и / или параметры форматирования, но не требует
соответствующий аргумент должен быть определенного типа.
Также обратите внимание, что в вызове stdlib-printf все char
аргументы автоматически
конвертировано в int
из-за вараг-звонка. Таким образом, сгенерированный код идентичен:
printf("Printf:%d:%X:%c:%d",cr2i,cr2i,cr2i,cr2i);
Это автоматическое преобразование не выполняется с %
оператор.
Других решений пока нет …