Почему Boost: Формат и printf ведут себя по-разному в одной строке формата

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

Разница в том, когда я хочу отобразить символ в виде целого типа.

Почему есть разница? Это ошибка или желаемое поведение?

4

Решение

Это ожидаемое поведение.

в повысить руководство написано о классической спецификации типа, которую вы используете:

Но классический флаг спецификации типа printf имеет более слабый
смысл в формате. Он просто устанавливает соответствующие флаги на
внутренний поток и / или параметры форматирования, но не требует
соответствующий аргумент должен быть определенного типа.

Также обратите внимание, что в вызове stdlib-printf все char аргументы автоматически
конвертировано в int из-за вараг-звонка. Таким образом, сгенерированный код идентичен:

printf("Printf:%d:%X:%c:%d",cr2i,cr2i,cr2i,cr2i);

Это автоматическое преобразование не выполняется с % оператор.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]