我想为占用过多RAM的程序执行磁盘I/O操作。
我使用 double 矩阵,并认为将它们作为字节写入磁盘是最快的方法(我需要保留 double )。

如何实现可移植性?

我找到了这段代码(here),但是作者说这不是可移植的...

#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    ofstream ofs( "atest.txt", ios::binary );

    if ( ofs ) {
        double pi = 3.14;

        ofs.write( reinterpret_cast<char*>( &pi ), sizeof pi );
        // Close the file to unlock it
        ofs.close();

        // Use a new object so we don't have to worry
        // about error states in the old object
        ifstream ifs( "atest.txt", ios::binary );
        double read;

        if ( ifs ) {
            ifs.read( reinterpret_cast<char*>( &read ), sizeof read );
            cout << read << '\n';
        }
    }

    return 0;
}

最佳答案



有不同的可移植性定义/级别。如果您要做的只是在一台计算机上编写这些代码,然后在同一台计算机上读取它们,那么您所关心的唯一可移植性是此代码是否定义明确。 (它是。)
如果要跨多个平台进行可移植的编写,则需要编写字符串值,而不是二进制值。

但是,请注意,您所拥有的代码缺乏适当的错误处理。它不会检查文件是否可以打开并成功写入。

09-07 02:18