2012-03-10 3 views
2

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

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

+8

Если вы можете использовать Boost, используйте Boost.Format. Библиотека C++ iostream медленная и громоздкая. Библиотека C stdio не безопасна для типов. –

ответ

6

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

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

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

0

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

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

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

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

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

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

0

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

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

Смежные вопросы