如何在分配到ostream后关闭ofstream?

时间:2014-05-28 19:07:30

标签: c++ ofstream ostream

我能做到

std::ostream& out = condition ? std::cout : std::ofstream(filename);

但如果out = std::ofstream(filename)

,我该如何关闭?

2 个答案:

答案 0 :(得分:4)

忘记关闭一段时间,你的代码:

std::ostream& out = condition ? std::cout : of.open(filename);

不会编译开始。 std::ofstream::open()不返回流 - 它返回void。您可以将其修复为:

std::ostream& out = condition ? std::cout : (of.open(filename), of);

现在回到关闭流,好吧,你不必,因为当流对象超出范围时(即析构函数被调用时),析构函数将关闭文件流。所以它会自动完成 - 好吧,在99.99%的情况下,除非你做了一些不寻常的事情,在这种情况下你要明确地关闭它!

答案 1 :(得分:4)

据我所知,您希望使用out关闭文件流?

您不需要明确关闭它。 std::fstream是RAII对象,因此它将在封闭范围的末尾自动关闭打开的文件。

当然,如果你真的需要立即关闭文件,你总是可以投射out

if( ptr = dynamic_cast<std::ofstream*>(out) ) {
    ptr->close();
}