1) Вы можете использовать printf
только для фундаментальных типов, а для целых чисел это действительно только для «родных» типов int
, long int
и т. Д. Для чего-то вроде uint32_t
требуются довольно неудобные и громоздкие макросы для портативной печати. Пользовательские типы вообще не поддерживаются.
2) printf
небезопасно. То есть правильность вашего кода зависит от значения строки форматирования, и вы не можете определить, правильно ли ваша программа сформирована только на основе статического анализа. Это фундаментальный недостаток системы типов C, которого «правильный» C ++ избегает.
Тем не менее, printf
(или, скорее, (v)snprintf
, скорее) обычно немного быстрее, чем iostreams, поэтому в высокопроизводительном контексте (например, высокочастотное ведение журнала) это очень конкурентоспособная альтернатива. Однако, если у вас есть только случайные операции вывода, вы должны предпочесть iostreams или какой-то другой гибкий, безопасный для типов идиоматический метод C ++. (И по общему признанию iostreams - вероятно, один из самых ужасных углов C ++.)