"ofstream"作为函数参数

Shi*_*bli 33 c++ function ofstream

有没有办法将输出流作为参数传递

void foo (std::ofstream dumFile) {}

我试过了,但它给了

error : class "std::basic_ofstream<char, std::char_traits<char>>" has no suitable copy constructor

Bor*_*jev 43

当然有.只需使用参考.像那样:

void foo (std::ofstream& dumFile) {}
Run Code Online (Sandbox Code Playgroud)

否则将调用复制构造函数,但是没有为该类定义ofstream.

  • 请注意:一旦构造完毕,通常获得哪种类型的流并不重要,而且最好使用“std::ostream&amp;”(注意缺少“f”)。 (2认同)

Joe*_*cou 8

您必须传递ostream对象的引用,因为它没有复制构造函数:

void foo (std::ostream& dumFile) {}
Run Code Online (Sandbox Code Playgroud)


Man*_*rse 6

如果您使用符合C++ 11的编译器和标准库,则可以使用它

void foo(std::ofstream dumFile) {}
Run Code Online (Sandbox Code Playgroud)

只要用rvalue调用它.(这样的电话看起来像foo(std::ofstream("dummy.txt")),或foo(std::move(someFileStream))).

否则,更改要通过引用传递的参数,并避免复制/移动参数:

void foo(std::ofstream& dumFile) {}
Run Code Online (Sandbox Code Playgroud)

  • 鉴于`std :: ofstream`有一个移动构造函数,它可以使用例如`foo(std :: ofstream("file"))将临时对象传递给声明为`void foo(std :: ofstream)`的函数. `.请注意,gcc的标准库尚未实现此构造函数,但是,当clang的标准库具有(即上面的代码用clang编译而不是用gcc编译; gcc是错误的). (2认同)