Ответ 1
Краткий ответ
Быстрее: printf
Более гибкий: cout
Длинный ответ
По сравнению с семейством sprintf потоки С++ должны быть более медленными (в 6 раз, если я вспомню элемент Exceptional С++, Herb Sutter). Тем не менее, большую часть времени вам не нужна эта скорость, но вы должны быть уверены, что ваш код не будет прослушиваться.
И легко сделать что-то не так с семейством функций printf, будь то неправильное количество аргументов, неправильные типы или даже ввести потенциальную уязвимость безопасности (спецификатор% n приходит в голову) в вашем коде.
Если это действительно не нужно (а потом, это называется саботаж), почти невозможно ошибиться с потоками С++. Они легко обрабатывают все известные типы (встроенные, std:: строки и т.д.), И его легко расширить. Например, допустим, у меня есть объект "Coordinate3D", и я хочу распечатать его данные:
#include <iostream>
struct Coordinate3D
{
int x ;
int y ;
int z ;
} ;
std::ostream & operator << (std::ostream & p_stream
, const Coordinate3D & p_c)
{
return p_stream << "{ x : " << p_c.x
<< " , y : " << p_c.y
<< " , z : " << p_c.z << " }" ;
}
int main(int argc, char * argv[])
{
Coordinate3D A = {25,42,77} ;
std::cout << A << std::endl ;
// will print "{ x : 25 , y : 42 , z : 77 }"
return 0 ;
}
Проблема с потоком заключается в том, что их довольно сложно правильно обрабатывать, когда вы хотите указать формат некоторых данных (например, пробелы для чисел), и иногда вам действительно нужно идти быстро. Затем вернитесь к printf или попробуйте использовать некоторые высокоскоростные альтернативы С++ (FastFormat).
Изменить: Обратите внимание, что серия тестов Thomas показывает интересные результаты (которые я воспроизвел прямо сейчас на своем компьютере), то есть: cout
и printf
имеют схожие характеристики, когда один из них избегает использования std::endl
(который очищает вывод в дополнение к выводу \n
).