在处理文件时,下面两个示例中哪一个更好?它们的性能是否有所不同?
ifstream input("input_file.txt");
ofstream output("output_file.txt");
对比
fstream input("input_file.txt",istream::in);
fstream output("output_file.txt",ostream::out);
从性能上来看,在这种情况下可能只有可忽略的差异。最多你可以节省一点内存。
重要的是第一种情况可以帮助语义理解:一个 std::fstream
可以被打开为输入、输出或两者兼备。因此在使用 std::ifstream
和 std::ofstream
时需要检查声明才能确定具体操作。而第二种情况容易出错,应该避免使用。
我的经验之谈是,仅当需要同时读写文件时才使用 std::fstream
。
if (std::ifstream input{"input_file.txt"})
...use input...
else
...log and/or throw...
is_open()
是什么时候了。 - Tony Delroyif
结束之前存在,所以你不必担心忘记关闭文件,而且你可以利用流的隐式转换为布尔值。 - meneldal
ostream
的地方使用istream
会导致错误,如果你意外使用了以输入模式打开的fstream
,编译器不会抱怨,因此请注意避免这种情况,这将避免许多不必要的麻烦。 - user657267