Использование printf в C ++ - PullRequest
2 голосов
/ 11 марта 2012

Поиск по сайту "printf vs cout" поднял дискуссию о разнице между ними, но это не то, что я искал.Исходя из Python, я большой поклонник способа printf, использующего форматирование строк, и я бы предпочел избегать cout, если возможно.

Считается ли плохой практикой игнорировать cout и использовать printf исключительно?Каковы будут последствия этого?В каких случаях использование printf не подходит?

Ответы [ 3 ]

6 голосов
/ 11 марта 2012

1) Вы можете использовать printf только для фундаментальных типов, а для целых чисел это действительно только для «родных» типов int, long int и т. Д. Для чего-то вроде uint32_t требуются довольно неудобные и громоздкие макросы для портативной печати. Пользовательские типы вообще не поддерживаются.

2) printf небезопасно. То есть правильность вашего кода зависит от значения строки форматирования, и вы не можете определить, правильно ли ваша программа сформирована только на основе статического анализа. Это фундаментальный недостаток системы типов C, которого «правильный» C ++ избегает.

Тем не менее, printf (или, скорее, (v)snprintf, скорее) обычно немного быстрее, чем iostreams, поэтому в высокопроизводительном контексте (например, высокочастотное ведение журнала) это очень конкурентоспособная альтернатива. Однако, если у вас есть только случайные операции вывода, вы должны предпочесть iostreams или какой-то другой гибкий, безопасный для типов идиоматический метод C ++. (И по общему признанию iostreams - вероятно, один из самых ужасных углов C ++.)

0 голосов
/ 11 марта 2012

cout является типобезопасным. cout - это ostream, поэтому он имеет тот же интерфейс, что и другие ostream с - например, вы можете предоставить новые перегрузки для печати foo.

printf имеет строки форматирования, которые иногда лучше, чем cout метод форматирования.

0 голосов
/ 11 марта 2012

Считается ли плохой практикой игнорировать cout и использовать исключительно printf?

Нет, если вы предпочитаете использовать printf, продолжайте.

Каковы будут последствия этого?

Отсутствует. C ++ может использовать cout, потому что он должен быть проще.

В каких случаях использование printf было бы невозможным?

Я сомневаюсь, что вы найдете такие случаи. Если вы делаете, люди, пишущие их, слишком субъективны.

...