Мнение
Я не знаю ни одного реального проекта, использующего потоки C ++. Они слишком медленные и сложны в использовании. Есть несколько более новых библиотек, таких как FastFormat и версия Boost , которые утверждают, что они были лучше, в последнем журнале ACCU Overload была статья о них. Лично я использовал библиотеку c FILE последние 15 лет или около того в C ++, и я не вижу причин для изменений.
Скорость
Вот небольшая тестовая программа (я быстро собираюсь вместе), чтобы показать основные проблемы со скоростью:
#include <stdio.h>
#include <time.h>
#include<iostream>
#include<fstream>
using namespace std;
int main( int argc, const char* argv[] )
{
const int max = 1000000;
const char* teststr = "example";
int start = time(0);
FILE* file = fopen( "example1", "w" );
for( int i = 0; i < max; i++ )
{
fprintf( file, "%s:%d\n", teststr, i );
}
fclose( file );
int end = time(0);
printf( "C FILE: %ds\n", end-start );
start = time(0);
ofstream outdata;
outdata.open("example2.dat");
for( int i = 0; i < max; i++ )
{
outdata << teststr << ":" << i << endl;
}
outdata.close();
end = time(0);
printf( "C++ Streams: %ds\n", end-start );
return 0;
}
И результаты на моем ПК:
C FILE: 5s
C++ Streams: 260s
Process returned 0 (0x0) execution time : 265.282 s
Press any key to continue.
Как мы видим, этот простой пример в 52 раза медленнее. Я надеюсь, что есть способы сделать это быстрее!
ПРИМЕЧАНИЕ: изменение endl на '\ n' в моем примере улучшило потоки C ++, сделав его всего в 3 раза медленнее, чем потоки FILE * (спасибо jalf ), могут быть способы сделать это быстрее.
Сложность использования
Я не могу утверждать, что printf () не является кратким, но он более гибок (IMO) и проще для понимания, как только вы пройдете начальный WTF для макросов.
double pi = 3.14285714;
cout << "pi = " << setprecision(5) << pi << '\n';
printf( "%.5f\n", pi );
cout << "pi = " << fixed << showpos << setprecision(3) << pi << '\n';
printf( "%+.3f\n", pi );
cout << "pi = " << scientific << noshowpos << pi<< '\n';
printf( "%e\n", pi );
Вопрос
Да, возможно, есть необходимость в лучшей библиотеке C ++, многие из них FastFormat - это библиотека, покажет только время.
1044 * Дэйв *