C++文件I/O比C文件I/O更为严格。
因此,在C++中,为文件I/O创建新库是否有用?我的意思是<fstream>谁能告诉我C++文件I/O有什么好处吗?

最佳答案

意见

我不知道任何使用C++流的实际项目。它们太慢并且难以使用。有一些较新的库,例如FastFormatBoost版本,声称在上一本ACCU Overload杂志中有一篇关于它们的文章比较好。我个人在C++中使用c FILE库已有15年左右了,我看不出有任何需要更改的理由。

速度

这是小的测试程序(我很快就凑齐了),以显示基本的速度问题:

#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++流,使其速度仅比FILE *流慢3倍(感谢jalf),可能有一些方法可以使其速度更快。

难以使用

我不能说printf()并不简洁,但是一旦您通过了宏代码的初始WTF,它就会更灵活(IMO)并且更易于理解。
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是该库,只有时间能证明。

戴夫

关于C++和C文件I/O,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/605839/

10-09 06:25