ifstream 和 ofstream 或 fstream 使用 in 和 out

ifstream and ofstream or fstream using in and out

在处理文件时,以下两个示例中的哪个是首选? 一个提供比另一个更好的性能吗?有什么区别吗?

ifstream input("input_file.txt");
ofstream output("output_file.txt");

fstream input("input_file.txt",istream::in);
fstream output("output_file.txt",ostream::out);

除非您需要不同的行为,否则请使用更简洁的形式...否则只会为更多错误创造空间。 FWIW,在可能的情况下,我更喜欢确定流的范围并检查打开的工作情况,如下所示:

if (std::ifstream input{"input_file.txt"})
    ...use input...
else
    ...log and/or throw...

在性能方面,在这种情况下可能只有微不足道的差异。充其量你只是在节省一点内存。

重要的是第一种情况有助于语义:std::fstream 可以在输入、输出或两者中打开。因此,您需要检查声明以确保在使用 std::ifstreamstd::ofstream 时可以清楚地说明您在做什么。第二种情况有更多的人为错误空间,这就是应该避免的原因。

我自己的经验法则是在需要对文件进行读写访问时使用 std::fstream,并且仅在这种情况下使用。